这段代码一切正常(将其缩短以便更好地阅读)。
当Client1向服务器发送请求时,服务器会立即响应他。但是,其他客户端看不到响应消息。
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:
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语句具有完全或阻止发送通道删除连接。
h.broadcast
default
select