2016-12-30 36 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