簡體   English   中英

Node-js:websocket重新連接后未收到事件

[英]Node-js: Not receiving events after websocket reconnect

我的node-js應用程序使用bitfinex-api-node npm包建立了一個Websocket連接,以從Bitfinex加密貨幣交換接收數據。

不幸的是,幾個小時后,連接默默斷開,並且該應用程序停止通過Websocket接收數據。 這似乎是一個已知問題,可能是bitfinex-api-module的錯誤。

現在,我嘗試通過首先連接Websocket並訂閱一些蠟燭數據來“手動”重新連接。 然后調用websocket.close()函數以在運行時模擬連接錯誤。 在on close函數中,我設置了另一個超時,並嘗試創建一個新的BFX()對象並對其進行open(),但從未調用.on(open)。

=>我一定做錯了。 我的邏輯有誤嗎? 有更好的重新連接方法嗎?

以下代碼有效,只需復制粘貼並運行即可。 我非常感謝您的任何提示或技巧。

const BFX = require('bitfinex-api-node');

//websocket
const opts = {
  manageCandles: true, 
  transform: true,
  API_KEY: 'hidden',
  API_SECRET: 'hidden',
  ws: {
    autoReconnect: true,
    seqAudit: true,
    packetWDDelay: 10 * 1000
  }
};
var websocket = new BFX().ws(2, opts);

websocket.on('open', () => {
    //websocket.auth.bind(websocket)
    console.log('.on(open) called');
    websocket.subscribeCandles('trade:5m:tBTCUSD')
});

websocket.on('close', ()=>{
    console.log('.on(close) called');
    setTimeout(function() { 
        websocket = new BFX().ws(2, opts);
        websocket.open();
    }, 10000);
});

websocket.onCandle({key: 'trade:5m:tBTCUSD'},(candles) => { 
    console.log(candles[0]);
})

websocket.open();

// this closes the connection after 20 seconds 
//after start for debugging purposes:
setTimeout(function() {         
        websocket.close();
    }, 10000);

問題是,當關閉上一個監聽器時,您不會將任何監聽器附加到新的websocket實例:

websocket.on('close', ()=>{
    console.log('.on(close) called');
    setTimeout(function() { 
        // this creates a new instance without listeners
        websocket = new BFX().ws(2, opts);
        websocket.open();
    }, 10000);
});

首次初始化websocket時,請添加它們:

websocket.on('open', /* code */);
websocket.onCandle(/* code */);

為了解決該問題,我建議編寫一個函數來創建和配置websocket的新實例:

function createWebsocket() {
    const websocket = new BFX().ws(2, opts);
    websocket.on('open', /* code */);
    websocket.onCandle(/* code */);
    websocket.open();
}

並在on('close')調用它:

websocket.on('close', ()=>{
    console.log('.on(close) called');
    setTimeout(createWebsocket, 10000);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM