GO Websocket向所有客户发送消息

这段代码一切正常(将其缩短以便更好地阅读)。

Client1向服务器发送请求时,服务器会立即响应他。但是,其他客户端看不到响应消息。

因此,我想进一步说明:当客户端向服务器发送请求时,服务器将响应所有客户端,以便所有客户端都能看到消息。

我怎样才能做到这一点?有任何示例或不错的入门教程吗?

提前致谢!

服务器:

import (

"github.com/gorilla/websocket"

)

func main() {

http.Handle("/server", websocket.Handler(echoHandler))

}

func echoHandler(ws *websocket.Conn) {

conn, err := upgrader.Upgrade(w, r, nil)

if err != nil {

return

}

for {

messageType, p, err := conn.ReadMessage()

if err != nil {

return

}

print_binary(p) // simple print of the message

err = conn.WriteMessage(messageType, p);

if err != nil {

return

}

}

}

回答:

您必须使用连接池将消息广播到所有连接。您可以将其用作教程/示例http://gary.burd.info/go-websocket-

chat

简化:

连接池是已注册连接的集合。见hub.connections

type connection struct {

// The websocket connection.

ws *websocket.Conn

// Buffered channel of outbound messages.

send chan []byte

// The hub.

h *hub

}

type hub struct {

// Registered connections. That's a connection pool

connections map[*connection]bool

...

}

为了广播所有客户端的消息,我们在连接池上进行如下迭代:

    case m := <-h.broadcast:

for c := range h.connections {

select {

case c.send <- m:

default:

delete(h.connections, c)

close(c.send)

}

}

}

h.broadcast在该示例中,是一个包含我们需要广播的消息的频道。

我们用default一节的select语句具有完全或阻止发送通道删除连接。

以上是 GO Websocket向所有客户发送消息 的全部内容, 来源链接: utcz.com/qa/416977.html

回到顶部