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在这个例子中是一个我们需要广播消息的通道。
我们使用select语句的default部分来删除发送通道满或阻塞的连接。参见在Go中使用select发送到通道的好处是什么?

相关内容

  • 没有找到相关文章