登录
首页 >  Golang >  Go问答

通过websocket向前端发送通知

来源:stackoverflow

时间:2024-02-15 16:36:24 322浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《通过websocket向前端发送通知》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

后端使用golang,前端-js。任务是从后端获取前端(js)的更新。

返回代码(go):

func ini_ws(wschan chan string) websocket.upgrader { // invoke from main
    var upgrader = websocket.upgrader{
        readbuffersize:  1024,
        writebuffersize: 1024,
        checkorigin: func(r *http.request) bool {
            return true
        },
    }

    var flag int64
    go http.listenandserve(":8080", http.handlerfunc(func(w http.responsewriter, r *http.request) {
        ws, err := upgrader.upgrade(w, r, nil)
        if err != nil {
            http.error(w, err.error(), http.statusinternalservererror)
            return
        }
        if atomic.compareandswapint64(&flag, 0, 1) {
            go func() {
                for data := range wschan {
                    ws.writemessage(websocket.textmessage, []byte(data))
                    fmt.println("data sent")
                }
            }()
        }
    }))

    return upgrader
}

在应用程序工作期间,将数据放入通道 wschan。它一直有效直到刷新网页。一旦我刷新页面前端就不会收到消息(尽管根据调试器后端发送它们)。它可能应该以另一种方式完成。请告诉我如何以正确的方式实现这项任务

前面(js)

conn = new WebSocket("ws://localhost:8080");
conn.onmessage = function (event) {
   // ........
};

正确答案


解决方案: 您需要在创建新连接之前关闭前一个连接

var wsconn *websocket.Conn
var flag int64
go http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        var err error
        if wsconn != nil {
            wsconn.Close()
        }
        wsconn, err = upgrader.Upgrade(w, r, nil)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
// .....

今天关于《通过websocket向前端发送通知》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>