请看一下这个src代码:
var clients = {}; // map<string, Connection> clients
var clientsReverse = {}; // map<Connection, string> clientsReverse
webSocketServer.on('connection', function(newclient) { // newclient is connection Object
newclient.on('message', function(message) {
var data = JSON.parse(message);
if (clients[data.name] === undefined) {
clients[data.name] = newclient;
clientsReverse[newclient] = data.name;
}
// ...
});
newclient.on('close', function(){
log(clientsReverse[newclient]); // prints always the same string
// remove closed connection
var key = clientsReverse[newclient];
delete clientsReverse[newclient];
delete clients[key];
});
});
如果客户端消失,我必须删除连接。正如你所看到的,我正在使用两个数组,但不幸的是它不起作用。如果我尝试断开3个随机客户端,则日志打印始终使用相同的名称...
任何想法我做错了什么?
答案 0 :(得分:0)
clients
和clientsReverse
都不是数组。那些是对象。对象在JavaScript中有点像哈希映射,因此您可以使用字符串访问其属性。例如:
var a = { b: 5 };
console.log(a['b']); //5
如果您尝试从对象中创建索引(newclient
是一个对象),它将首先toString
。 newclient.toString()
的结果是[object Object]
,对于您使用的每个对象而言,它都是一个不同的对象并不重要。这就是为什么即使您使用不同的newclient
对象,它也始终解析为相同的密钥。
我不确定你想在这里实现什么。您可以尝试使用数组([]
),但那些只能有数字索引。您也可以尝试使用客户端的某种独特属性,或者他们的ID或名称?