node.js - 准确跟踪#open sockets via redis

标签 node.js redis socket.io

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

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

在套接字连接上,我为用户递增一个 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/

相关文章:

node.js - User.findByID 不是函数

javascript - JSDoc - 带有部分创建的类型定义

javascript - 在 Jest 中模拟过程方法

javascript - 异步调用mongojs find函数

java - Redis/Redisson LocalCachedMap - TTL/驱逐如何工作?

java - 有没有办法让 eclipselink/JPA 使用 redis 来保存和检索持久性单元级 (L2) 缓存?

javascript - Socket.IO 和 IE8 - jsonp 轮询连接总是失败

erlang - 从 Erlang 中的字符串转换

javascript - 如何连接到 "host:port"但不使用浏览器,仅使用 Node js/Javascript?

ios - 套接字 IO 日志记录 : Got Message 3 in Swift/iOS