让Binance期货wss活下去

问题描述 投票:0回答:1

我有这样的代码。

startWss();
function startWss(){
let  wsBinance = new WebSocket('wss://stream.binancefuture.com/stream?streams=btcusdt@bookTicker', { 
    apiKeyID: testApiKeys[0], 
    apiKeySecret: testApiSecrets[0] 
});

if(wsBinance){
    wsBinance.on('error', () => { console.error });
    wsBinance.on('open', () => { console.log('Connection opened bookTicker.') } );
    wsBinance.on('close', function () {
        startWss();
        console.log('Connection closed bookTicker.');
    } );
    wsBinance.on('initialize', () => console.log('Client initialized, data is flowing.' ));
    wsBinance.onmessage = e => {

        let dataJson = JSON.parse(e.data)
        if(dataJson.data){
            priceA= dataJson.data.b
            priceB= dataJson.data.a
        }
    }
}

}

但它在一段时间后关闭。我怎么才能让它一直运行呢?我想应该通过在关闭状态下重新启动它来工作,但它没有工作。

sockets websocket bitcoin trading binance
1个回答
0
投票

你可能需要周期性地ping(或发送一个pong响应)服务器以表明连接还活着。

理解这是在连接级别而不是应用程序级别(即这不是Binance给出的流路径的一部分,而是在websocket级别本身)。

代码将取决于您选择的 websocket 框架:有些框架可能会自动处理 ping 并发出 pong,但在您的框架中可能不会发生。

基本上,在收到来自服务器的Ping时(检查您的事件处理程序以确定这一点),您将需要发送回一个 "Pong",可能会使用在Ping帧中发送的相同有效载荷。

请看 https:/tools.ietf.orghtmlrfc6455#section-5.5.3。 以获取与此相关的RFC。pong的操作码是0xA。

© www.soinside.com 2019 - 2024. All rights reserved.