当前位置: 代码迷 >> JavaScript >> NodeJS 多进程运行后,socket.io 应该怎么使用?与 Node 单进程时一样吗
  详细解决方案

NodeJS 多进程运行后,socket.io 应该怎么使用?与 Node 单进程时一样吗

热度:1286   发布时间:2013-10-30 12:56:22.0
NodeJS 多进程运行后,socket.io 应该如何使用?与 Node 单进程时一样吗?

多进程运行 node 时,进程间变量不共享,用户请求一个路由后,会由随机的进程来处理。

socket.io 默认使用的内存存储,我们所定义的 socket.io 事件会限制在当前进程。

为了实现多进程 socket.io 的正常使用,就需要一种持久性的存储,socket.io 支持 RedisStore 存储,或者研究下它的接口实现文件存储或者 mongodb 存储之类的。

?

io.set('store', redisStore);

假如我们使用 RedisStore 存储,当客户端连接后,使用 join 命令把当前连接请进其 username 的房间,这样可以实现即使用户同时打开了 N 个浏览器窗口,都能实时获得通知状态以及实时改变状态。

?

?

io.sockets.on('connection',function(socket){// 根据认证握手后的数据,取得用户唯一标识
    socket.join(username);});

向客户端发送数据

?

?

io.sockets.in(username).emit('notify num', count);
io.sockets.emit('online', username);

后者向所有连接的客户端发送数据,前者只向 username 房间的连接发送数据(包括自己)。

?

还有一种发送数据的方式是广播(broadcast),给房间内除了自己外的所有连接发送数据。

?

socket.broadcast.emit("data ....");

不论服务端单进程还是多进程,客户端的代码书写方式都是一样的,这对客户端来说是透明的。

  相关解决方案