WebsocketServer: отправить сообщение о событии подключенному клиенту - PullRequest
0 голосов
/ 08 июля 2019

Проблема проста: у меня есть сервер WS, который делает это "для {}". Мне нужно «зарегистрировать» подключенного пользователя, затем отправить сообщение о событии (вне функции CoreWS). Я добавил пример NodeJS, который делает именно то, что мне нужно, для лучшего понимания.

Код Go Lang, который не работает: я использую этот пкг 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, который работает:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...