概述
最近在写一个代码,实现前后端数据实时交互。后端开发使用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向前端发送字节流与前端解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复