我有一个套接字服务器,想知道某个特定用户是否有一个或多个已连接的套接字。
出于负载平衡和扩展的目的,不同位置可以有多个套接字服务器,因此客户端理论上可以有多个套接字连接,每个连接位于套接字服务器的不同位置/实例。
在套接字连接上,我为用户递增一个 Redis 键,在套接字断开连接上,我递减该键。
但是,如果我手动或通过 forever/supervisor 重新启动套接字服务器,则不会调用递减计数器,从而为该用户提供不正确的打开套接字连接数。
我的问题是,可以使用当前方法并进行一些调整以在 Redis 中存储准确的数字,还是我应该考虑使用另一种方法?
编辑:在每个套接字连接上,我使用 redis 客户端订阅特定 channel 。这个能用吗?
编辑:我可以从 client.publish
回调中获取返回值,以查看有多少订阅者收到了消息:
client.publish("somechannel", "some message", function(err, val){
console.log("here with val: " + val);
});
但这个值似乎并不总是准确的。
编辑:我从 client.publish(
获得不准确数字的原因是因为我错误地取消了相关 channel 的订阅。上述编辑似乎有效。
最佳答案
这里是答案:
client.publish("somechannel", "some message", function(err, val){
console.log("here with val: " + val);
});
关于node.js - 准确跟踪#open sockets via redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25240393/