如何检测订户是否已离开Redis PUB / SUB通道?

时间:2018-10-22 03:06:13

标签: node.js redis

我有多个应用正在运行。每个实例都有用户在各个实例之间相互聊天。我需要显示用户是否已脱机。如果实例崩溃,那将不会发生。当实例仍然存在时,我可以通过该套接字的websocket丢失连接事件,并通知其他实例。但是,如果应用程序实例崩溃,那将不会发生。

1 个答案:

答案 0 :(得分:1)

您可以使用CLIENT LIST实现目标。该命令列出所有连接到Redis的客户端的信息。以下是CLIENT LIST显示的客户信息示例:

id=87 addr=127.0.0.1:63950 fd=10 name= age=3 idle=3 flags=P db=0 sub=3 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
  1. 如果客户端崩溃或关闭连接,Redis将其从客户端列表中删除,并且您无法从CLIENT LIST命令的结果中获取其 addr
  2. 如果客户正在订阅/ p预订一个或多个频道/模式,则客户信息的 cmd 字段将为 subscribe psubscribe ,而 sub / psub 字段是其订阅的频道/样式的数量。
  3. 如果客户端取消订阅/强制订阅所有通道/模式,并且正在向Redis发送其他命令,则客户端信息的 cmd 字段将是它发送给Redis的最后一个命令,而 sub / psub 字段将为0。

为了找出剩下的订户,您可以定期调用CLIENT LIST命令并检查每个连接客户端的信息。