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 自动转发微信群信息到另外一个微信群
    • ¥15 outlook无法配置成功
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换