快捷搜索:  汽车  科技

js自定义websocket连接(js利用WebSocket链接后端并获取数据的方法)

js自定义websocket连接(js利用WebSocket链接后端并获取数据的方法)代码如下:ws = new WebSocket('ws://trade.xxx.com:3100/qt123_m6fk'); ws.onopen = function(evt) { console.log(evt); //console.log(ws.readyState); if (ws.readyState===1) { ws.send('sub|EURUSD|GBPUSD'); } }; ws.onclose = function(evt) { console.log(2); }; ws.onmessage = function(evt) { //console.log(1); //console.log(evt.data); var blob = evt.data; //console.log(parseBlob(blob)); //通过

在切图网的网站切图项目开发中也会经常遇到一些数据接口处理,数据联调的需求,通常情况下大部分是用ajax去传输json数据,然后渲染到页面,链接的协议是http(s),方法可以用jquery的ajax,vue的axios等等,都封装好的上手比较简单,但是最近遇到的一个是利用ws协议,需要用WebSocket来链接获取,期间遇到了不少问题,比如blob大数据的处理,WebSocket链接方法,是否有好的WebSocket插件等等,这里做个简单的普及。

js自定义websocket连接(js利用WebSocket链接后端并获取数据的方法)(1)

ws协议:另外一种协议,和http的最大优势是,不需要前端往后端发送请求,后端可以直接向前端发送数据,可能你已经想到了,用来做即时聊天在合适不过了

Blob:大数据的一种格式,通常没有json的那么好的格式规范,类似一种二进制数据(像是乱码),需要自己去解析和截取需要的字符串,解析方法可以利用FileReader

ws链接插件:有没有一款和jquery封装ajax一样的插件呢,我以为有,但是实际没有(没有主流的),后来才发现链接ws原生也只需要几行简单代码,所以基本上告别插件了

代码如下:

ws = new WebSocket('ws://trade.xxx.com:3100/qt123_m6fk'); ws.onopen = function(evt) { console.log(evt); //console.log(ws.readyState); if (ws.readyState===1) { ws.send('sub|EURUSD|GBPUSD'); } }; ws.onclose = function(evt) { console.log(2); }; ws.onmessage = function(evt) { //console.log(1); //console.log(evt.data); var blob = evt.data; //console.log(parseBlob(blob)); //通过FileReader读取数据 var reader = new FileReader(); //以下这两种方式我都可以解析出来,因为Blob对象的数据可以按文本或二进制的格式进行读取 //reader.readAsBinaryString(blob); //reader.readAsText(blob 'gbk2312'); reader.readAsArrayBuffer(blob); reader.onload = function(){ //这个就是解析出来的数据 //console.log(this.result); var dataview = new DataView(this.result); //var pz = dataview.substring(0); var bid = dataview.getFloat64(7 true).toFixed(5); var ask = dataview.getFloat64(15 true).toFixed(5); var last = dataview.getFloat64(23 true).toFixed(5); var volume = dataview.getBigUint64(31 true); //var datetime_msc = dataview.getBigInt64(39 true); var datetime_msc = dataview.getInt32(39 true); //var t = getUint64(dataview 39 true); console.log(bid ask last volume new Date(datetime_msc).toISOString()); } }; ws.onerror = function(evt) { console.log(4); };

标签:websocket

猜您喜欢: