小编典典

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

redis

我有多个使用redisstore水平缩放的socket.io服务器。我已经有效地设置了房间,并且能够成功地跨服务器等广播到房间。现在,我正在尝试建立状态页面,而我无法弄清楚的是如何简单地计算连接的用户数所有服务器。

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

有什么建议吗?

谢谢。


阅读 264

收藏
2020-06-20

共1个答案

小编典典

我通过让每个服务器定期在redis中设置用户计数来解决此问题,该计数包括自己的pid:

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

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

对于每一个keys userCount*合计+ =get <key>

因此,如果服务器崩溃或关闭,则间隔+10之后,其计数将减少redis

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

2020-06-20