在写项目的时候,需要在 Node.js下的Redis中通过value取得key(当一个value只对应一个key的情况),但是当用client.keys获取key,然后用 for (var key in reply) {}来遍历,里面用 client.get(reply[key], function(err, reply2) {}来获取值,但是死活这个for里面的key变量到 client.get(reply[key], function(err, reply2) {}里面这个key成了常量,就是最后一个值的key值,按逻辑应该是没问题的,但是死活就是搞不定。尝试了良久,终于用一种奇葩的方式搞定。
// 客户端关闭
sock.on('close', function(data) {
// 这里的data是客户端的数据
// console.log(sock);
//{ address: '180.109.79.188', family: 'IPv4', port: 10698 }
var closed_client = sock._peername;
var closed_iport = closed_client.address + ':' + closed_client.port;
// Node.js下的Redis中通过value取得key(当一个value只对应一个key的情况)
//------------------------------------------------------------------------
client.keys('device:iport:*', function(err, reply) {
// reply is null when the key is missing
// console.log(reply);
var i = -1;
for (var key in reply) {
client.get(reply[key], function(err, reply2) {
i++;
if (reply2 == closed_iport) {
// console.log("###" + i);
// console.log("###" + reply2);
// console.log(reply[i]);
var key2 = reply[i].split(":");
var device_mac = key2[2];
// console.log(device_mac);
// 更改redis里面的信息
client.del("device:" + device_mac + ":1", redis.print);
client.set("device:" + device_mac + ":0", getNowTime(), redis.print);
console.log(getCurentTime() + '===Device: ' + device_mac + " Lost Connection From Server.===");
}
});
}
});
//------------------------------------------------------------------------
console.log(getCurentTime() + '===Client: ' + closed_iport + " closed===");
});