广播 Broadcasting events
广播可以向除发送者外的所有连接的客户端发送消息

可以通过 BroadcastToRoom 广播给房间里面的用户,可以在 connect 阶段默认设置一个房间,则可以广播给所有连接的用户
server.OnConnect("/", func(s socketio.Conn) error {
s.SetContext("")
fmt.Println("connected:", s.ID())
s.Join("bcast") // 加入房间
return nil
})
广播也适用于多个 Socket.IO 服务器。
您只需将默认适配器替换为Redis 适配器或其他兼容的适配器

房间机制 Rooms
如果需要广播给指定用户,则可以使用 Rooms,sockets可以join
和 leave
房间。它可用于向一部分客户端广播事件

代码示例
// 监听 join_rooms 事件
server.OnEvent("/", "join_rooms", func(s socketio.Conn, msg string) {
s.Join("ryan_rooms")
server.BroadcastToRoom("", "ryan_rooms", "join_rooms", s.ID()+" join ryan_rooms") // 广播给所有用户
fmt.Println(s.ID()+"加入房间 ", msg)
})
实时更新
结合 redis pub sub 发布订阅机制,可以实现无状态的多实例实时更新,实际使用还需要结合 login 等权限校验机制确保业务安全。
以页面实时获取后端数据为例,用户打开页面,建立 websocket 连接后,默认订阅room_id “liveUpdate”

然后使用 redis 的 pub sub 机制,后端订阅频道,并且将数据广播到对应房间,有数据进来就发送到对应的 redis 频道


详细代码:
https://github.com/zhengjianhong001/go-websocket-live-update