我想在我的网络应用程序中实现实时通知功能。我正在关注此示例“https://github.com/gorilla/websocket/tree/master/examples/chat”。我需要服务器(集线器)来获取消息,它需要根据某种形式的ID将这些消息推送到各个客户端。我怎样才能做到这一点?
答案 0 :(得分:0)
从你提到的样本中:
case message := <-h.broadcast:
for client := range h.clients {
select {
case client.send <- message:
default:
close(client.send)
delete(h.clients, client)
}
}
}
这是向所有客户端广播消息的情况。正如您所看到的,它遍历所有已注册的客户端,并将消息发送给它们中的每一个。
要保留此功能,我们只需添加另一种情况:发送到单个客户端。
case message := <-h.clientMessage:
for client := range h.clients {
if message.ClientID == client.ID {
select {
case client.send <- message:
default:
close(client.send)
delete(h.clients, client)
}
}
}
}
这应该会给你一个想法。其余的我留给你。
注意:我的示例代码可以通过以下方式优化:使用map[clientID]Client
直接访问客户端。