socket.io关于room和在房间里广播发消息的疑问
发布于 5 年前 作者 sunyoboy 4431 次浏览 来自 问答
  1. socket.io的服务器端如何区分用户是通过cookie还是其他的信息?0.9.x的实现有通过cookie及保存昵称来实现的。
  2. socket.io的房间与用户的对应关系通用的做法是存在redis这样的缓存中吗?
6 回复
  1. cookie or token, 可以放在 header or querystring 中. websocket 握手是一次 HTTP 请求
  2. 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 由于浏览器有参与的成分…比较复杂…

  1. 看 polling 请求带上没
  2. 看在 socket.io 服务端解析没

websocket是长链接吧 服务器可以区别不同的socket client , room是把一些socket client 放在不同内存对象集合的 放在redis也可以实现

回到顶部