首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泄漏插座(sockets.io)

泄漏插座(sockets.io)
EN

Stack Overflow用户
提问于 2014-08-11 12:25:39
回答 1查看 261关注 0票数 1

我有一个连接到套接字服务器(node.js)的客户端。我好像漏水了。

下面是导致泄漏套接字的流。

  1. 连接到套接字服务器
  2. 签名(我看到服务器上的注销确认)
  3. 再次登录到套接字服务器(请参见套接字服务器上的确认)
  4. 快速重新启动套接字服务器(通过重新保存文件强制使用监视模块重新启动)
  5. 客户端重新连接到套接字服务器。现在我看到了两个连接到套接字服务器的套接字,而不是应该是一个的套接字。

如果重复步骤2-4,我可以看到来自同一个客户端的多个连接。

以下是我的客户端socket.io代码:

client.js:

代码语言:javascript
运行
复制
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 (而不仅仅是在客户机选择签名时从其他地方调用),我似乎得到的泄漏套接字较少,但仍然得到它们。

如何创建多个套接字?

EN

回答 1

Stack Overflow用户

发布于 2014-08-11 14:43:59

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

但是,这意味着如果套接字服务器在我已经建立了连接之后就关闭了,那么就不会尝试重新连接。因此,如果使用这种方法来解决泄漏套接字,我必须自己处理这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25243274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档