如何正确删除websocket连接onClose
How to remove websocket connection onClose properly
请看下面的src-code:
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个随机客户端,日志打印总是相同的名称…
你知道我做错了什么吗?
clients
和clientsReverse
都不是数组。这些是物体。对象的行为有点像JavaScript中的hashmap,所以你可以用字符串访问它们的属性。例如:
var a = { b: 5 };
console.log(a['b']); //5
如果您尝试从一个对象(newclient
是一个对象)中创建索引,它将首先toString
它。newclient.toString()
的结果是[object Object]
,对于你使用的每个对象,它是一个不同的对象并不重要。这就是为什么即使你使用不同的newclient
对象,它总是解析到相同的键。
[]
),但它们只能有数字索引。您还可以尝试使用客户机的某种独特属性,例如它们的id或名称。 相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 在Qualtrics中,介绍如何动态连接两个滑块
- 使用优化器在慢速连接上加载main.js时需要js超时
- 如果连接类型为none,则Javascript Function Only警报
- GTK百老汇支持同时连接
- 在node.js中写入ECONNRESET错误和套接字连接检查
- 如何将所有JS文件连接到一个文件夹中
- 在cordova android应用程序中连接数据库
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 如何正确删除websocket连接onClose
- 当客户端与网络断开连接时,Websocket onclose未在chrome - Linux中触发