2016-12-30 32 views
1

我必须后端通过套接字相互沟通。在发送一个我只爆炸。在接收端风帆插座将不会重新连接

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; 

但它不起作用。我如何强制他们重新连接?

回答

2

这是一个古老的问题,但由于我有一个解决方案,似乎是无证的(并没有提供其他答案),我张贴以备将来参考。

问题:在使用sails.io.js节点模块

的解决方法我SailsSocket实例不会尝试重新连接:手动设置io.socket._raw.io._reconnectiontrue

具体而言,当你的插座断开,上面的属性设置为true和套接字将自动尝试重新连接。

io.socket.on('disconnect', function() { 
    io.socket._raw.io._reconnection = true; 
}); 

这是相当丑陋,因为你必须用._raw访问底层socket.io套接字客户端,与.io得到插座的经理,并设置另一个[伪]私有变量,._reconnection,以true

应该强调的是,整个“不重置”问题仅在节点中使用sails.io.js存在,而浏览器实现正常工作。

测试上: sails 0.11.0sails.io.js node SDK 1.1.12node 6.11.2

1

使用@ContinuousLoad解决方案,我设法摆脱非连接问题。我还设置另一个变量:

io.socket._raw.io._reconnectionAttempts = Infinity;

这样我可以尝试重新连接永远。

但我不知道它为什么这样工作。我一直在研究sails.io.js代码,https://github.com/balderdashy/sails.io.js/blob/master/dist/sails.io.js和socket-io.client,特别是管理器的部分:https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options

看来我们确实需要改变“重新连接尝试”和“重新连接”属性,并且它们必须在套接字未连接时更改,如sails.io.js代码中所述:

//设置连接选项,以便它们只能在套接字断开连接时更改。 var _opts = {};

但我真的不知道为什么我们必须创建私人对象属性。不过,没有“_”部分的测试。显然,这是互联网上唯一能够解决这个问题的部分,所以我很高兴你明白了@ContinuousLoad!非常感谢!

+0

感谢您的调查!我很高兴在这里看到运动。我想我会在有机会的时候在[balderdashy/sails.io.js](https://github.com/balderdashy/sails.io.js?files=1)上提出这个问题。 – ContinuousLoad