通过redis准确跟踪#open sockets



我有一个套接字服务器,并且想知道一个特定的用户是否有一个或多个连接的套接字。

可以在不同的位置有多个套接字服务器用于负载平衡和扩展目的,因此理论上客户端可以有多个套接字连接,每个套接字连接在套接字服务器的不同位置/实例。

在套接字连接时,我增加用户的redis键,在套接字断开时,我减少键。

然而,如果我重新启动套接字服务器,无论是手动还是通过forever/supervisor,都不会调用递减计数器,从而为该用户打开的套接字连接提供不正确的数字。

我的问题是,有可能使用当前的方法与一些调整有一个准确的数字存储在redis,或者有另一种方法,我应该看看使用?

编辑:在每个套接字连接,我使用redis客户端订阅一个特定的通道。这个可以用吗?

编辑:我可以从client.publish回调中获得返回值,以查看有多少订阅者收到了消息:
    client.publish("somechannel", "some message", function(err, val){
            console.log("here with val: " + val);
    });

但是这个值似乎并不总是准确的。

编辑:我从client.publish(得到不准确的数字的原因是因为我错误地从相关频道取消订阅。上面的编辑似乎起作用了。

答案如下:

client.publish("somechannel", "some message", function(err, val){
        console.log("here with val: " + val);
});

最新更新