火币websocket获取k线数据等数据接口火币官方文档地址:https://huobiapi.github.io/do...pako(unzipgzip):https://github.com/nodeca/pako参考链接(地址可能过时了,但是内容没有):https://www.cnblogs.com/zhumi...死了,连接火币websocket地址wss在://api.huobi.pro/ws的时候收到疑惑,连不上。以为自己没有像其他get/post接口一样传入参数,以为wss使用的是SSL通道,所以没有建立连接,我想是服务器需要中转。但是最后发现是因为地址的问题,这个地址根本访问不了,至少我访问不了。后来我改了这个地址:wss://api.hadax.com/ws成功连接到火币websocket。规则首先建立连接,客户端发送订阅请求。本官方文档说明了火币服务器是否返回订阅成功与否的反馈。如果信息成功,将定期发送gzip压缩数据。解压gzip需要pakohttps://github.com/nodeca/pako在我们自己的客户端接收数据,解压得到真正的json数据。自己做前端该做的相应操作,推入数据,展示数据等等。但是,在这期间,还有一个动作需要执行。火币服务器每5秒向客户端发送一次ping数据。当客户端收到这个信息后,需要发送一个相应的pong数据。内容为ping的数据体(对应的数据格式如下),如果服务端在发送两次ping数据后没有收到客户端返回的pong数据,火币服务端将关闭连接。其他信息,查看官方文档中关于websocket的说明即可。//服务端发送的ping数据{ping:1562741680416}//客户端返回服务端的pong数据{pong:1562741680416}执行代码//K线相关lethburl='wss://api.huobipro.com/ws';//实时币价lethausl='wss://api.hadax.com/ws';letrequestK={//请求信息对应的数据req:"market.bchusdt.kline.1min",id:"bchusdt",from:Math.round(newDate().getTime()/1000)-60,to:Math.round(newDate().getTime()/1000)};letsubK={//订阅数据sub:"market.bchusdt.kline.1min",id:"bchusdt"};letsocketK=newWebSocket(hausl);socketK.onopen=function(){console.log("connectionestablish");socketK.send(JSON.stringify(subK));socketK.send(JSON.stringify(requestK));};socketK.onmessage=function(event){letblob=event.data;让阅读器=新文件阅读器();reader.onload=function(e){letploydata=newUint8Array(e.target.result);letmsg=pako.inflate(ploydata,{to:'string'});处理数据(味精);};reader.readAsArrayBuffer(blob,"utf-8");};socketK。onclose=function(){console.log('connectionclosed');};//处理接收到的信息functionhandleData(msg){letdata=JSON.parse(msg);if(data.ping){//如果是ping消息sendHeartMessage(data.ping);}elseif(data.status==='ok'){//响应数据handleReponseData(data);}else{//数据体console.log(data)}}//发送响应消息functionsendHeartMessage(ping){socketK.send(JSON.stringify({"pong":ping}));}functionhandleReponseData(data){}
