【问题标题】:Sails socket won't reconnectSails 插座不会重新连接
【发布时间】:2017-05-15 00:10:09
【问题描述】:

我有两个后端通过套接字相互通信。在发送时,我只爆炸了。在接收时

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;

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

【问题讨论】:

    标签: javascript sockets sails.js communication


    【解决方案1】:

    这是一个老问题,但由于我有一个似乎没有记录的解决方案(并且没有提供其他答案),我将发布以供将来参考。

    问题:我的SailsSocket 实例在使用sails.io.js 节点模块时未尝试重新连接

    解决方法:手动设置io.socket._raw.io._reconnectiontrue

    具体来说,当你的socket断开连接时,将上面的属性设置为true,socket会自动尝试重新连接。

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

    它相当难看,因为您必须使用._raw 访问底层的socket.io 套接字客户端,使用.io 获取套接字的管理器,并将另一个[伪] 私有变量._reconnection 设置为@987654331 @。

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

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

    【讨论】:

      【解决方案2】:

      使用@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,尤其是manager部分:https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options

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

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

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

      【讨论】:

      • 感谢您的调查!我很高兴看到这里有动静。我想当我有机会时,我会在balderdashy/sails.io.js 上提出这个问题。
      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2013-04-02
      • 2012-06-15
      相关资源
      最近更新 更多