计算水平服务器上的socket.io用户

rbr*_*brc 7 scalability redis node.js socket.io

我有多个使用redisstore水平扩展的socket.io服务器.我已经有效地设置了房间,并且成功地能够通过服务器等广播到房间.现在我正在尝试建立一个状态页面,我正在努力弄清楚如何简单地计算连接的用户数量所有服务器.

io.sockets.clients('room')和io.sockets.sockets只会告诉你那台服务器上连接的客户端数量,而不是所有连接到同一RedisStore的服务器.

建议?

谢谢.

rbr*_*brc 1

我通过让每个服务器定期在 redis 中设置用户计数来解决这个问题,并设置包含其自己的 pid 的过期时间:

每做setex userCount:<pid> <interval+10> <count>

然后状态服务器可以查询每个键,然后获取每个键的值:

对于每个keys userCount*做总计+=get <key>

因此,如果服务器崩溃或关闭,则其计数将在间隔+10后从redis中删除

对丑陋的伪代码感到抱歉。:)