日期:2014-05-16  浏览次数:20282 次

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);
<