我有一个连接到套接字服务器(node.js)的客户端。我好像在泄漏插座。
这是导致泄漏套接字的流程。
如果我重复步骤2-4,我可以看到来自同一客户端的多个连接。
这是我的客户端socket.io代码:
client.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
(而不仅仅是在客户选择注销时从其他地方调用),我似乎得到的泄漏套接字更少,但仍然可以获得它们。
我如何创建多个套接字?
答案 0 :(得分:0)
解决方案虽然不一定是问题的答案,但在我的情况下使用socket.io.disconnect()
代替socket.disconnect()
。
但是,这意味着如果套接字服务器在我已建立连接后关闭,则表示没有尝试重新连接。因此,如果使用这种方法来解决泄漏的套接字,我必须自己处理这种情况。