站長資訊網
        最全最豐富的資訊網站

        聊聊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,結尾必須使用nn          fmt.Fprintf(rw, "id: %dnevent: ping ndata: %dnn", 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視頻教程】

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产日韩精品无码区免费专区国产| 亚洲一级Av无码毛片久久精品 | 久久精品综合一区二区三区| 成人国产精品高清在线观看| 一本色道久久88—综合亚洲精品| 国产精品极品美女自在线观看免费| 国内精品伊人久久久久AV影院| 久久久精品波多野结衣| 91嫩草亚洲精品| 99re8这里有精品热视频免费| 中文字幕精品一区| 欧美日韩精品一区二区三区不卡 | 亚洲av无码乱码国产精品| 久久久久一级精品亚洲国产成人综合AV区 | 精品偷自拍另类在线观看| 亚洲国产精品一区二区九九| 精品无码国产污污污免费网站国产 | 亚洲国产另类久久久精品小说 | 久久综合久久自在自线精品自| 午夜三级国产精品理论三级 | 久久久久久青草大香综合精品| 国产成人高清精品免费观看| 黑人精品videos亚洲人| xxx国产精品视频| 国产精品亚洲аv无码播放| 日韩人妻无码精品久久久不卡| 亚洲A∨午夜成人片精品网站| 久久精品国产亚洲Aⅴ香蕉| 精品久久久久久无码中文野结衣 | 国产精品.XX视频.XXTV| 久久精品国产只有精品2020| 国产精品v欧美精品v日韩精品| 91麻豆精品国产自产在线观看一区 | 久久亚洲日韩精品一区二区三区 | 亚洲人午夜射精精品日韩| 中文字幕无码久久精品青草| 无码人妻丰满熟妇精品区| 亚洲欧美精品SUV| 精品福利视频一区二区三区| 国产精品免费高清在线观看| 国产日韩一区在线精品欧美玲|