如何正确删除websocket连接onClose

时间:2015-09-30 14:00:06

标签: javascript websocket

请看一下这个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个随机客户端,则日志打印始终使用相同的名称...

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

clientsclientsReverse都不是数组。那些是对象。对象在JavaScript中有点像哈希映射,因此您可以使用字符串访问其属性。例如:

var a = { b: 5 };
console.log(a['b']); //5

如果您尝试从对象中创建索引(newclient是一个对象),它将首先toStringnewclient.toString()的结果是[object Object],对于您使用的每个对象而言,它都是一个不同的对象并不重要。这就是为什么即使您使用不同的newclient对象,它也始终解析为相同的密钥。

我不确定你想在这里实现什么。您可以尝试使用数组([]),但那些只能有数字索引。您也可以尝试使用客户端的某种独特属性,或者他们的ID或名称?