dousi3362 2019-07-08 19:16
浏览 149

WebsocketServer:将事件消息发送到连接的客户端

Problem is simple: i have WS server that doing it's "for {}". I need "register" connected user, then send message on event(outside of CoreWS function). I'm added NodeJS example that doing exactly what i need, for better understanding.

Go Lang Code that fails: i'm using this pkg https://github.com/gobwas/ws

var conn_itf interface{} //yeah,
var op_itf interface{} //i know it's not how it works

func main() {
    go collector()
    go sender()
    http.ListenAndServe(":3333", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        conn, _, _, err := ws.UpgradeHTTP(r, w)
        if err != nil {
            // handle error
        }
        go func() {
            defer conn.Close()

            for {
                msg, op, err := wsutil.ReadClientData(conn)
                conn_itf = conn // i'm trying to "register" user
                op_itf = op
                if err != nil {

                }
                err = wsutil.WriteServerMessage(conn, op, msg)
                if err != nil {

                }
            }
        }()
    }))
}

func collector() {
    for {
        fmt.Println("conn: ", conn_itf)
        fmt.Println("op: ", op_itf)
        time.Sleep(10000 * time.Millisecond)
    }
}

func sender() {
    for {
        msg := []byte("Hello world!")
        time.Sleep(50000 * time.Millisecond)
        wsutil.WriteServerMessage(conn_itf, op_itf, msg)  //invoking ws-send
    }
}

NodeJS that working:

const wss = new WebSocket.Server({ port: 3333 })
wss.on('connection', ws => {
    sockets.set('key', ws) //this code remember active connection
    ws.on('message', message => {
      console.log(`Received message => ${message}`)
    })

})


function callsend(data) {
    const ws = sockets.get('key') //this code sending message on invoking
    ws.send(data)
}
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 求解 yolo算法问题
    • ¥15 虚拟机打包apk出现错误
    • ¥30 最小化遗憾贪心算法上界
    • ¥15 用visual studi code完成html页面
    • ¥15 聚类分析或者python进行数据分析
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝