以下代码对我不起作用:
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');
此处存在同样的问题-无法按照您所描述的方式进行连接-断开-重新连接。
但是,我发现以下方法可行。 奇怪的是,如果您省略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});
这解决了我的问题,谢谢先生。 米兰
最有用的评论
使用这个:
io.connect(null,{'force new connection':true});