[英]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.