Sails 套接字不会重新连接
Sails socket won't reconnect
我有两个后端通过套接字相互通信。在发送一个我只爆炸了。在接收端
const socketIOClient = require('socket.io-client');
const sailsIOClient = require('sails.io.js');
const io = sailsIOClient(socketIOClient);
io.sails.url = "http://route.to.my.backend";
io.sails.initialConnectionHeaders = {secret: process.env.SOCKETSECRET};
当套接字连接断开时,套接字不会重新连接。我试过:
io.sails.forceNew = true;
但它不起作用。我怎样才能强制他们重新连接?
这是一个老问题,但由于我有一个似乎没有记录的解决方案(并且没有提供其他答案),我发布以供将来参考。
问题:我的 SailsSocket
实例在使用 sails.io.js
节点模块时不尝试重新连接
解决方法:手动设置io.socket._raw.io._reconnection
为true
具体来说,当你的套接字断开连接时,将上面的属性设置为true
,套接字将自动尝试重新连接。
io.socket.on('disconnect', function() {
io.socket._raw.io._reconnection = true;
});
它很难看,因为你必须用._raw
访问底层的socket.io
套接字客户端,用.io
获取套接字的管理器,并设置另一个[伪]私有变量, ._reconnection
, 到 true
。
应该强调的是,整个 "not reconncting" 问题仅在节点中使用 sails.io.js
时出现,而浏览器实现工作正常。
测试于:
sails 0.11.0
,
sails.io.js node SDK 1.1.12
,
node 6.11.2
使用@ContinuousLoad 解决方案,我设法摆脱了非连接问题。我还设置了另一个变量:
io.socket._raw.io._reconnectionAttempts = Infinity;
这样我就可以尝试永远重新连接。
但我不知道为什么会这样。我一直在研究sails.io.js代码,https://github.com/balderdashy/sails.io.js/blob/master/dist/sails.io.js and the socket-io.client, especially the part of the manager: https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options
看来我们确实需要更改 "reconnectionAttempts" 和 "reconnection" 属性,并且必须在未连接套接字时更改它们,如 sails.io.js 代码中所述:
// Set up connection options so that they can only be changed when socket is disconnected.
var _opts = {};
但我真的不知道为什么我们必须创建私有对象属性。不过,没有测试没有“_”部分。显然,这是互联网上唯一可以解决此问题的部分,所以我很高兴您找到了答案,@ContinuousLoad!非常感谢!
我有两个后端通过套接字相互通信。在发送一个我只爆炸了。在接收端
const socketIOClient = require('socket.io-client');
const sailsIOClient = require('sails.io.js');
const io = sailsIOClient(socketIOClient);
io.sails.url = "http://route.to.my.backend";
io.sails.initialConnectionHeaders = {secret: process.env.SOCKETSECRET};
当套接字连接断开时,套接字不会重新连接。我试过:
io.sails.forceNew = true;
但它不起作用。我怎样才能强制他们重新连接?
这是一个老问题,但由于我有一个似乎没有记录的解决方案(并且没有提供其他答案),我发布以供将来参考。
问题:我的 SailsSocket
实例在使用 sails.io.js
节点模块时不尝试重新连接
解决方法:手动设置io.socket._raw.io._reconnection
为true
具体来说,当你的套接字断开连接时,将上面的属性设置为true
,套接字将自动尝试重新连接。
io.socket.on('disconnect', function() {
io.socket._raw.io._reconnection = true;
});
它很难看,因为你必须用._raw
访问底层的socket.io
套接字客户端,用.io
获取套接字的管理器,并设置另一个[伪]私有变量, ._reconnection
, 到 true
。
应该强调的是,整个 "not reconncting" 问题仅在节点中使用 sails.io.js
时出现,而浏览器实现工作正常。
测试于:
sails 0.11.0
,
sails.io.js node SDK 1.1.12
,
node 6.11.2
使用@ContinuousLoad 解决方案,我设法摆脱了非连接问题。我还设置了另一个变量:
io.socket._raw.io._reconnectionAttempts = Infinity;
这样我就可以尝试永远重新连接。
但我不知道为什么会这样。我一直在研究sails.io.js代码,https://github.com/balderdashy/sails.io.js/blob/master/dist/sails.io.js and the socket-io.client, especially the part of the manager: https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options
看来我们确实需要更改 "reconnectionAttempts" 和 "reconnection" 属性,并且必须在未连接套接字时更改它们,如 sails.io.js 代码中所述:
// Set up connection options so that they can only be changed when socket is disconnected. var _opts = {};
但我真的不知道为什么我们必须创建私有对象属性。不过,没有测试没有“_”部分。显然,这是互联网上唯一可以解决此问题的部分,所以我很高兴您找到了答案,@ContinuousLoad!非常感谢!