我有这样的代码。
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
}
}
}
}
但它在一段时间后关闭。我怎么才能让它一直运行呢?我想应该通过在关闭状态下重新启动它来工作,但它没有工作。
你可能需要周期性地ping(或发送一个pong响应)服务器以表明连接还活着。
理解这是在连接级别而不是应用程序级别(即这不是Binance给出的流路径的一部分,而是在websocket级别本身)。
代码将取决于您选择的 websocket 框架:有些框架可能会自动处理 ping 并发出 pong,但在您的框架中可能不会发生。
基本上,在收到来自服务器的Ping时(检查您的事件处理程序以确定这一点),您将需要发送回一个 "Pong",可能会使用在Ping帧中发送的相同有效载荷。
请看 https:/tools.ietf.orghtmlrfc6455#section-5.5.3。 以获取与此相关的RFC。pong的操作码是0xA。