我是靠谱客的博主 鲤鱼哈密瓜,最近开发中收集的这篇文章主要介绍QTwebsocket向前端发送字节流与前端解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在写一个代码,实现前后端数据实时交互。后端开发使用QT的Qwebsocket模块。本来想使用json来收发数据,前后端解析起来也很方便,但是不知道json的效率会怎样,决定使用字节流来向前端发送数据。经过几天的探索,终于找到了方法,先上代码:

1,后端部分代码如下:

        double nVersion = 1.12345678917;
        double dblValue = 125.00008;
        QByteArray baResult;
        //串行化的流
        QDataStream dsOut(&baResult, QIODevice::ReadWrite);  //做输出,构造函数用指针
        //设置Qt串行化版本
        dsOut.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流
        //串行化输出
        dsOut<<nVersion<<dblValue;
        pClient->sendBinaryMessage(baResult);//向前端发送baResult

2,前端代码:

websocket.onmessage = function (evt) {
var reader = new FileReader();
   reader.readAsArrayBuffer(evt.data);
   reader.onload = function (e) {
   var dataview = new DataView(reader.result);
   alert(reader.result.byteLength);
   var doubles = new Float64Array(reader.result.byteLength / 8)
   for (var i = 0; i < doubles.length; i++) {
          doubles[i] = dataview.getFloat64(i * 8); // 每次提取一个double
          alert(doubles[i])
                                                     } 
}
}

后端使用QDataStream进行串行化,得到一个QByteArray类型的变量,将其发给前端,从前端可以很容易地看出收到的数据类型是Blob类型,所以我们还要将Blob类型转为ArrayBuffer类型。关于ArrayBuffer的资料网上很多很多,这里就不提了。大致的意思就是:因为一个double类型占8个字节,所以我们按照8个8个来取,这样就能提取数据了。同样的,读者可以试试取出int型或者double、int混合起来的数据。至于效率究竟有没有json高,我还得研究一下。

最后

以上就是鲤鱼哈密瓜为你收集整理的QTwebsocket向前端发送字节流与前端解析的全部内容,希望文章能够帮你解决QTwebsocket向前端发送字节流与前端解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部