重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“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如何实现SSE”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!