多进程运行 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);<