socket.io关于room和在房间里广播发消息的疑问
- socket.io的服务器端如何区分用户是通过cookie还是其他的信息?0.9.x的实现有通过cookie及保存昵称来实现的。
- socket.io的房间与用户的对应关系通用的做法是存在redis这样的缓存中吗?
6 回复
- cookie or token, 可以放在 header or querystring 中. websocket 握手是一次 HTTP 请求
- socket.io room 跟 用户对应关系放内存 io.sockets.adapter.rooms 即是所有的房间 & client id 对应关系
即使你使用了 socket.io-redis , 房间数据还是放在内存的, redis 只用来 pub/sub
不过不要担心, 房间数据是很轻量的,就是一个大的Hash 而已, 这部分数据放在redis 意义不大, 真正的内存占用是维持一个连接所消耗的内存 可以横向扩展, 多起实例
@magicdawn 使用最新版的socket.io,在浏览器中的js中使用原来的 document.cookie = “nickname=” + $(’#nickname’).val() + “;; path=/”;这种方式没效果。
Cookie 由于浏览器有参与的成分…比较复杂…
- 看 polling 请求带上没
- 看在 socket.io 服务端解析没
websocket是长链接吧 服务器可以区别不同的socket client , room是把一些socket client 放在不同内存对象集合的 放在redis也可以实现