gpt4 book ai didi

node.js - 套接字泄漏 (sockets.io)

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:37 25 4
gpt4 key购买 nike

我有一个连接到套接字服务器(node.js)的客户端。我似乎正在泄漏套接字。

这是导致套接字泄漏的流程。

  1. 连接到套接字服务器
  2. 注销(我在服务器上看到注销确认)
  3. 再次登录套接字服务器(请参阅套接字服务器上的确认信息)
  4. 快速重启socket服务器(通过重新保存文件使用supervisor模块强制重启)
  5. 客户端重新连接到套接字服务器。我现在看到有 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, 的情况下尝试了上述操作,但在客户端注销后再次登录时似乎遇到了问题。

如果我从 disconnected 事件中调用 close_socket (而不仅仅是当客户端选择注销时从其他地方调用),我似乎得到的泄漏套接字较少,但仍然得到它们。

如何创建多个套接字?

最佳答案

解决方案虽然不一定是问题的答案,但就我而言,是使用 socket.io.disconnect() 而不是 socket.disconnect()

但是,这意味着如果我已经建立连接后套接字服务器出现故障,则不会尝试重新连接。所以,如果使用这种方法来解决套接字泄漏,我必须自己处理这种情况。

关于node.js - 套接字泄漏 (sockets.io),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25243274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com