2 回答
TA贡献1797条经验 获得超6个赞
Gorilla 聊天示例接近您的需要。该示例将从任何客户端接收到的消息广播到所有连接的客户端。执行以下操作以使代码适应您的用例:
更改客户端读取泵以丢弃收到的消息,而不是将消息发送到集线器。
func (c *Client) readPump() {
defer func() {
c.hub.unregister <- c
c.conn.Close()
}()
c.conn.SetReadLimit(maxMessageSize)
c.conn.SetReadDeadline(time.Now().Add(pongWait))
c.conn.SetPongHandler(func(string) error {
c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
for {
if _, _, err := c.NextReader(); err != nil {
break
}
}
}
更改您的 Kafka 读取循环以将消息发送到Hub.broadcast通道。
for {
msg, err := c.ReadMessage(xxx)
if err != nil {
// handle error
}
hub.broadcast <- msg
}
删除将客户端发送队列中的消息合并为单个 websocket 消息的代码,或者调整客户端以在单个 websocket 消息中处理多个 Kafka 消息。
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报