- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 socket.io、redis 来跟踪用户在线/离线状态。在这里,我使用 hub_id 模式存储以名称为键的用户数。我可以通过获取与 hub_ 模式匹配的键数来获取用户数量。现在 key 具有在线或离线状态的值(value)。
我无法获得编号。 for 循环外的用户在线或离线变量。
app.get('/test', function(req, res) {
client.keys('hub*', function (err, keys) {
console.log(keys.length);
for (var i=0; i<keys.length; i++){
client.hgetall(keys[i], function(err, reply) {
if(reply.status == "online"){
onlinehub++;
}
else if(reply.status == "offline"){
offlinehub++;
}
});
}
console.log(onlinehub +"-" +offlinehub)
});
});
最佳答案
在这里您无法访问 for 循环之外的 onlinehub
和 offlinehub
是因为这些变量在异步函数调用中更新,即
client.hgetall(keys[i], function(err, reply) { //<-- this is callback function
if(reply.status == "online"){
onlinehub++;
}
else if(reply.status == "offline"){
offlinehub++;
}
console.log(onlinehub +"-" +offlinehub); //Put the log here and check if it is giving correct numbers?
});
因此您只能在该异步回调函数中访问 onlinehub
和 offlinehub
变量的更新值。现在您在控制台上的日志一定是0-0。
要解决这个问题,您可以查看下面的代码
app.get('/test', function(req, res) {
//Defined a callback function to know when counting on redis keys finished
var onComplete = function() {
console.log(onlinehub+"-"+offlinehub);
};
client.keys('hub*', function (err, keys) {
console.log(keys.length);
var taskToGo = keys.length;
if(taskToGo==0){
onComplete();
}else{
for (var i=0; i<keys.length; i++){
client.hgetall(keys[i], function(err, reply) {
if(reply.status == "online"){
onlinehub++;
}
else if(reply.status == "offline"){
offlinehub++;
}
//Added this line
if(--taskToGo==0){
onComplete();
}
});
}
}
});
});
您可以从async for loop in node.js 寻求帮助
关于node.js - 使用redis,nodejs查找在线/离线用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43315547/
This question already has answers here: Using Variable for Thread group Ramp up time (3个答案) 3年前关闭。 从
我希望使用 RPyC 为硬件板提供 API 作为服务。该板一次只能满足一个用户的需求。有什么方法可以让 RPyC 强制执行一次只有一个用户可以访问吗? 最佳答案 我不确定这是否有效(或有效),但您可以
如果我想以每秒 10 个请求运行测试。如何让 Jmeter 选择每秒处理该请求数所需的最佳线程数。 我将线程数设置为与每秒请求数相同。 最佳答案 您可以使用恒定吞吐量计时器 click here你只需
我正在尝试进行查询以检查客户表并返回过去 30 天、过去 365 天和所有时间具有特定值的用户数。 所有时间的计数很简单: $stmt = $conn->prepare("SELECT count(i
我是一名优秀的程序员,十分优秀!