返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >聊聊Go怎么实现SSE?需要注意什么?
  • 893
分享到

聊聊Go怎么实现SSE?需要注意什么?

SSEgo语言 2023-05-14 19:05:43 893人浏览 安东尼
摘要

本篇文章给大家带来了关于Go的相关知识,其中主要跟大家聊一聊Go用什么方式实现SSE,以及需要注意的事项,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。一、服务端代码package main import ( "fmt

本篇文章给大家带来了关于Go的相关知识,其中主要跟大家聊一聊Go用什么方式实现SSE,以及需要注意的事项,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

聊聊Go怎么实现SSE?需要注意什么?

一、服务端代码

package main

import (
   "fmt"
   "net/Http"
   "time"
)

type SSE struct {
}

func (sse *SSE) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
   flusher, ok := rw.(http.Flusher)
   if !ok {
      http.Error(rw, "Streaming unsupported!", http.StatusInternalServerError)
      return
   }

   rw.Header().Set("Content-Type", "text/event-stream")
   rw.Header().Set("Cache-Control", "no-cache")
   rw.Header().Set("Connection", "keep-alive")
   rw.Header().Set("Access-Control-Allow-Origin", "*")
   for {
      select {
      case <-req.Context().Done():
         fmt.Println("req done...")
         return
      case <-time.After(500 * time.Millisecond):
         // 返回数据包含id、event(非必须)、data,结尾必须使用\n\n
         fmt.Fprintf(rw, "id: %d\nevent: ping \ndata: %d\n\n", time.Now().Unix(), time.Now().Unix())
         flusher.Flush()
      }
   }

}

func SendData(data chan int64) chan int64 {
   for {
      data <- time.Now().Unix()
      time.Sleep(time.Second * time.Duration(2))
   }
}
func main() {
   http.Handle("/sse", &SSE{})
   http.ListenAndServe(":8080", nil)
}

二、客户端代码

    const source = new EventSource('http://127.0.0.1:8080/sse');
    source.onopen = () => {
        console.log('链接成功');
    };
    source.addEventListener("ping",function(res){
         console.log('获得数据:' + res.data);
    })
    source.onerror = (err) => {
        console.log(err);
    };

三、注意事项(重要)

如果服务器端提供了event参数(完整的消息包含id、data、event),那么客户端就需要使用addEventListener 显式监听这个事件,才会正常获取消息,否则事件不会触发。如果服务器端没有提供event 参数,只有id、data等,可以使用onmessage回调监听消息:

场景一:服务器有event 参数,并且定义了一个叫ping 的具体事件

const source = new EventSource('http://127.0.0.1:8080/sse');
source.onopen = () => {
    console.log('链接成功');
};
source.addEventListener("ping",function(res){
     console.log('获得的数据是:' + res.data);
})
source.onerror = (err) => {
    console.log(err);
};

场景二:服务器返回的数据不包含event

const source = new EventSource('http://127.0.0.1:8080/sse');
  source.onopen = () => {
      console.log('链接成功');
  };
  source.onmessage(function(res){
       console.log('获得的数据是:' + res.data);
  })
  source.onerror = (err) => {
      console.log(err);
  };

【推荐学习:go视频教程

以上就是聊聊Go怎么实现SSE?需要注意什么?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 聊聊Go怎么实现SSE?需要注意什么?

本文链接: https://lsjlt.com/news/203669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 聊聊Go怎么实现SSE?需要注意什么?
    本篇文章给大家带来了关于Go的相关知识,其中主要跟大家聊一聊Go用什么方式实现SSE,以及需要注意的事项,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。一、服务端代码package main import ( "fmt...
    99+
    2023-05-14
    SSE go语言
  • 跟大家聊聊win10装win11需要准备什么
    windows11系统尽管目前是预览版,但是电脑要安装这个系统也是需要达到一定条件的,下面我们一起来看看电脑安装win11需要什么样的准备吧。一、首先,使用win10系统的用户需要满足什么条件适合装win11呢?CPU:当代1Ghz 64b...
    99+
    2023-07-12
  • 什么是RPC?聊聊node中怎么实现 RPC 通信
    RPC vs HTTP相同点都是两台计算机之间的网络通信。ajax是浏览器和服务器之间的通行,RPC是服务器与服务器之间的通行需要双方约定一个数据格式不同点寻址服务器不同ajax 是使用 DNS作为寻址服务获取域名所对应的ip地址,浏览器拿...
    99+
    2022-11-22
    Node.js RPC
  • 聊聊JavaScript怎么实现视差滚动
    本篇文章给大家带来了关于js的相关知识,其中主要跟大家聊一聊有关视差滚动效果,以及如何用js实现视差滚动 ,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。前言现代网站设计已经不再依赖于简单的滚动页面,而是使用各种动画和交互来吸引用户的注...
    99+
    2023-05-14
    前端 JavaScript CSS
  • Kali Linux需要注意什么
    这期内容当中小编将会给大家带来有关Kali Linux需要注意什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Kali Linux 在渗透测试和白帽子方面是业界领先的 Linux 发行版。默认情况下,该...
    99+
    2023-06-28
  • 注册域名需要注意什么
    本篇内容介绍了“注册域名需要注意什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一,域名注册商的时候,要了解该注册的品牌。尽量挑选老练,...
    99+
    2023-06-06
  • Python怎么实现在线聊天室私聊
    本篇内容主要讲解“Python怎么实现在线聊天室私聊”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现在线聊天室私聊”吧!实现思路对于私聊,我觉得应该有如下两点需要实现私聊列表更...
    99+
    2023-06-02
  • Javascript、CSS实现页面重构需要注意什么
    这篇文章主要介绍Javascript、CSS实现页面重构需要注意什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!About JS、CSSCSS:样式表置于顶部避免CSS表达式使用外部JS、CSS削减JS、CSS&l...
    99+
    2023-06-08
  • Go语言怎么实现聊天小工具
    本篇内容介绍了“Go语言怎么实现聊天小工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码实现server.gopackage ...
    99+
    2023-07-05
  • mysql建表需要注意什么
    本篇文章和大家了解一下mysql建表需要注意什么。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一、mysql各个名称库名、表名、字段名全部使用小写字母,用'_'下划线分割...
    99+
    2024-04-02
  • Access转SqlServer需要注意什么
    本篇内容介绍了“Access转SqlServer需要注意什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 使用View.post()需要注意什么
    这篇文章给大家分享的是有关使用View.post()需要注意什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言有时候,我们会需要用到 View.post() 方法,来将一...
    99+
    2024-04-02
  • seo建站需要注意什么
    seo建站时需要注意以下几个点网站布局网站的内容布局模式,一般采用扁平化的树形模式,将重要的文章和栏目布局到首页,通过首页点击栏目进入到列表页,有利于蜘蛛抓取页面。代码编写的格式seo建站一般采用DIV+CSS的模式来进行代码的编写,使网站...
    99+
    2024-04-02
  • 学习Linux需要注意什么
    小编给大家分享一下学习Linux需要注意什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、不要“玩 Linux”  很多人用 Linux 的时候会感觉很迷茫,...
    99+
    2023-06-13
  • 初学J2ME需要注意什么
    这篇文章主要讲解了“初学J2ME需要注意什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“初学J2ME需要注意什么”吧!  下面请看一段代码:    import javax.microed...
    99+
    2023-06-03
  • html5测试需要注意什么
    这篇文章主要介绍“html5测试需要注意什么”,在日常操作中,相信很多人在html5测试需要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5测试需要注意什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-05
  • URL优化需要注意什么
    本篇内容介绍了“URL优化需要注意什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1,URL要简短,越短越好  无论是用户还是搜索引擎...
    99+
    2023-06-10
  • php注入记录需要注意什么
    这篇文章给大家介绍php注入记录需要注意什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。常见获取变量$_GET$_POST $_COOKIE $_SERVERis_numeric()...
    99+
    2024-04-02
  • SpringBoot+STOMP协议怎么实现私聊、群聊功能
    这篇文章主要介绍了SpringBoot+STOMP协议怎么实现私聊、群聊功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、为什么需要STOMP  &n...
    99+
    2023-06-15
  • 聊聊golang怎么用递归实现反转链表
    在golang中,反转链表可以使用递归来实现。在递归函数中,我们首先需要将当前节点的下一个节点作为参数传入递归函数,然后让当前节点指向下一个节点的下一个节点。最后返回递归函数的返回值,即新的头节点。以下是使用递归实现反转链表的golang代...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作