我有一个连接到套接字服务器(node.js)的客户端。我似乎正在泄漏套接字。
这是导致泄漏套接字的流程。
- 连接到套接字服务器
- 注销(我在服务器上看到注销确认)
- 再次登录到套接字服务器(参见套接字服务器上的确认)
- 快速重启套接字服务器(通过重新保存文件使用主管模块强制重启)
- 客户端重新连接到套接字服务器。我现在看到 2 个连接到套接字服务器的套接字,而不是应该只有一个。
如果我重复步骤 2-4,我可以看到来自同一个客户端的多个连接。
这是我的客户端 socket.io 代码:
客户端.js:
function start_socket(tok){
console.log("socket trying to connect");
//try every second to reconnect
socket = io.connect(sockets_host, { query: $.param({token: tok}), 'forceNew' : true, 'reconnection limit' : 100, 'max reconnection attempts' : 'Infinity' });
socket.on('connect', function() {
console.log('connected to socket server');
set_loggedin_status('true');
});
socket.on('disconnect', function() {
console.log('disconnected from server');
set_loggedin_status('false');
close_socket(); //get leaked sockets, wether I call this or not, though less if I do...
});
socket.on('error',function(err){
console.log('socket error: ' + err);
attempt_login();
});
}
function close_socket(){
console.log("in close socket");
socket.disconnect(true);
set_loggedin_status('false');
}
我在没有 的情况下尝试了上述'forceNew' : true,
方法,但是在客户端注销后我似乎再次登录时遇到了问题。
如果我close_socket
从disconnected
事件内部调用(而不仅仅是在客户端选择注销时从其他地方调用),我似乎得到更少的泄漏套接字,但仍然得到它们。
我如何创建多个套接字?