Socket.io-client: 连接->断开连接->连接不起作用

创建于 2011-07-23  ·  33评论  ·  资料来源: socketio/socket.io-client

以下代码对我不起作用:
socket = io.connect('http://host.com:8081'); socket.disconnect(); socket = io.connect('http://host.com:8081');

这是我发现的一种解决方法:
socket = io.connect('http://host.com:8081'); socket.disconnect();删除io.sockets [' http://host.com:8081 ']; io.j = []; socket = io.connect('http://host.com:8081');

Unable to reproduce bug

最有用的评论

使用这个: io.connect(null,{'force new connection':true});

所有33条评论

此处存在同样的问题-无法按照您所描述的方式进行连接-断开-重新连接。

但是,我发现以下方法可行。 奇怪的是,如果您省略setTimeout并立即重新连接(或在太短的超时后),则您将立即断开连接。

var ns = io.connect(
        '/',
        { reconnect: false }
    ),
    numDisconnects = 2;

ns.on('connect', function () {

    console.log('Connected');

    if (numDisconnects > 0) {
        console.log('Disconnecting');
        ns.socket.disconnect();

        setTimeout(function () {
            console.log('Reconnecting');
            ns.socket.connect();
        }, 5000);
    }
    numDisconnects--;


});

ns.on('disconnect', function () {
    console.log('Disconnected');
});

套接字= io.connect(主机);
socket.disconnect();
socket.socket.reconnect(); || socket.socket.connect(host);
可以,但是由于每隔几秒钟触发一次重新连接或第二次连接断开

我遇到了同样的问题,因此由于此错误,我无法及时完成节点淘汰赛条目:(
请先解决它,然后再中断其他操作!

上述变通办法都没有对我有用。 伙计们,这是严重的表演塞子。 为什么使用“无法复制”标签? 我的测试环境是OS X 10.6上最新的Chrome。

我看到的是同一件事。 同样,第二次调用io.connect()也会失败,并且不会出现错误。 有没有人找到解决方法?

使用这个: io.connect(null,{'force new connection':true});

多么方便,又丑陋。 从io.js:196删除io.sockets[uuri] = socket; io.js:196怎么办? 那条妙语有什么意义?

不幸的是,这里有同样的问题。 断开连接后无法重新连接。

断开连接后唯一对我有用的东西:
io.j = [];
io.sockets = [];

编辑:这不仅是客户端disconnect()的一个问题。 它不会在断开连接时清理数据结构-您可以看到SocketNamespace。$ events仍然具有关闭连接的所有回调,等等。

@MrJoes使用io.connect(null,{'force new connection':true});

好吧,这真的是重新连接的最终API吗? 有点奇怪。

@skrat我同意你的看法。 应该有一个io.reconnect API。

我不这么认为, io.connect然后io.disconnect然后io.connect应该可以正常工作。

@milani :由于孤立的套接字,事件处理程序等滞留在io.sockets []中而导致内存泄漏?

说实话,这不是一个好主意。

@MrJoes您确定内存泄漏吗? io.socket的@ 3rd-Eden告诉我使用此API。

没关系,如果您传递“强制新连接”,它将不会向io.sockets []添加套接字。

但是,这有点难看,尤其是对于端点而言,因为您丢失了多路复用-它依靠io.sockets中的套接字来执行多路复用。

@Gorokhov建议通过套接字原型使用重新连接对我来说效果很好:
socket.socket.reconnect()
谢谢

这里同样的问题-socket.reconnect()对我不起作用,我将尝试其他一些解决方法。 但是,这令人失望,它是更新中相当基本的功能。 因此,我敢肯定很多应用程序都无法轻松更新。

如果开发人员需要任何帮助重现此问题的帮助,我很乐意提供帮助-我很惊讶地看到此错误上有“无法重现”标签。

似乎由于此拉取请求而即将进行重大更新: https :
@cacois尝试使用socket.socket.reconnect()而不是socket.reconnect()

啊,好消息:-)

@ wackfordjf3嘿,谢谢。 现在可以使用。 :)

仍然面临重新连接的问题。
第二次重新连接会导致在服务器上触发多个重新连接事件。 (这与以后每次重新连接的次数成正比)。 触发在名称空间上重新连接。

socket = io.connect(url {'reconnect':false}); socket.disconnect; //第一次断开
socket.socket.reconnect(); socket.disconnect(); //第二次断开
socket.socket.reconnect(); //第二次重新连接

开启:套接字。 [email protected]

除此之外:
丑陋的方式运作良好:
删除io.sockets [url]; io.j = [];
套接字= io.connect(URL);

面对人们已经在这里遇到的同样的事情; 甚至在命名空间中也很奇怪。 删除命名空间的解决方案:

var base =' http:// localhost :3000'
,频道=“ /聊天”
,网址=基本+频道;

var socket = io.connect(url);

//调用socket.disconnect()不会断开连接,因此:
io.sockets [base] .disconnect();

//重新连接语法。
删除io.sockets [base]; io.j = [];
套接字= io.connect(URL);

注意:socket.io版本-0.9.0,平台:Windows 7 Home Premium

我花了一个下午的时间来解决正在超时的单元测试,因为断开连接后我无法连接。 {'force new connection':true}解决了该问题。 谢谢@milani

使用Cucumber.js在这里同样存在问题。 由于必须创建和销毁对象,因此我面临着相同的连接,断开连接和连接失败。 Thx @milani@rawberg

这个对我有用! 谢谢@mrjoes。

谢谢@milani

对于可能再次遇到此问题的用户,在v1.0发行版中,“强制新连接”设置现在称为“ forceNew”。

我推动了一项承诺,以添加BC,所以很快没人会再遇到这个问题了!

我工作了4个,socket = io.connect(socketUrl,{'forceNew':true});

forceNew禁用整个名称空间多路复用系统,这真的是解决方案吗?

我正在使用:
套接字= io.connect()
...
// 这
socket.io.reconnect()
..

Client.prototype.connect = function() {
    if (!this.connection) {
        this.connection = this.socket.connect(config.host + ':' + config.port);
    }
    else {
        if (!this.connection.connected) {
            this.connection.connect();
        }
    }
};

io.connect(null,{'force new connection':true});

这解决了我的问题,谢谢先生。 米兰

此页面是否有帮助?
0 / 5 - 0 等级