我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

本篇文章给大家带来了关于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?需要注意什么?的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

什么是RPC?聊聊node中怎么实现 RPC 通信

RPC是服务器和服务器之间的通信,它是基于TCP协议的,传输的数据是二进制,因此数据包要相比于http要小,同时解码数据更快。node中的net模块是创建RPC服务。
2022-11-22

Go语言怎么实现聊天小工具

本篇内容介绍了“Go语言怎么实现聊天小工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码实现server.gopackage main
2023-07-05

Javascript、CSS实现页面重构需要注意什么

这篇文章主要介绍Javascript、CSS实现页面重构需要注意什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!About JS、CSSCSS:样式表置于顶部避免CSS表达式使用外部JS、CSS削减JS、CSS
2023-06-08

怎么注册域名以及有什么需要注意的

本篇文章为大家展示了 怎么注册域名以及有什么需要注意的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。有什么需要注意的?对于不熟悉域名注册的新站长来说怎么注册域名确实是一个很不简单的问题,现在企业对域
2023-06-06

在Go语言中定义接口时需要注意什么?

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《在Go语言中定义接口时需要注意什么?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!在 Go 中定
在Go语言中定义接口时需要注意什么?
2024-04-04

怎么用Go语言实现UDP版聊天小工具

这篇文章主要介绍“怎么用Go语言实现UDP版聊天小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Go语言实现UDP版聊天小工具”文章能帮助大家解决问题。代码实现server.gopacka
2023-07-05

python实现美团网美食数据爬取需要注意什么

小编给大家分享一下python实现美团网美食数据爬取需要注意什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据爬取三步曲之前方有坑工作需求需要采集OTA网站的
2023-06-02

互联网中实现密码的复杂化需要注意什么

小编给大家分享一下互联网中实现密码的复杂化需要注意什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!密码的复杂化#个人隐私保护系列#为了密码更安全,大家想会在想到
2023-06-02

Go语言怎么实现一个简单的并发聊天室

今天小编给大家分享一下Go语言怎么实现一个简单的并发聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。并发聊天服务器这里主
2023-06-29

GO使用socket和channel怎么实现简单控制台聊天室

今天就跟大家聊聊有关GO使用socket和channel怎么实现简单控制台聊天室,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用socket和channel,实现简单控制台聊天室这
2023-06-22

使用C++实现适配器类要注意什么问题

本文小编为大家详细介绍“使用C++实现适配器类要注意什么问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“使用C++实现适配器类要注意什么问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现尽管Adapter
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录