zmq+protobuf 的坑点难点
之前项目要用到zmq+protobuf的方式传递数据
软件采用前后端分离的方式开发,其中前端是异地同事用python开发的,后端是我们这边用C++开发的。
1.中间有遇到问题是前后端传送zmq信息时,发现字节流数据不一样。
最后发现原因是python这边zmq库发送的是ASCII码数据,也就是说把数据当字符串发送了。这个前端这边没办法改,所以就只能后端这边适配下了,将接收到的字节流数据,直接当字符串数据读取,最后转为uint8数组。
比如:
前端发送的数据:
[8,9] //这个是字符串数据,内存实际存的是下面这样的(十进制):
91 56 44 57 93
后端要转换成:
8 9
还不理解的话,可以再看下下面这个图:] 的ascii码值 93
当前上面这个问题跟protobuf库没啥关系。
2.项目过程中,我同样要开发个工具,用QT开发,集成zmq+protobuf。
在使用protobuf库时就出现了问题,编译就直接报错了,说是相应实现没有发现。
但我已经引入了库,没道理会出现这种问题啊。
这个问题卡了我好几天时间…
最后发现原因是编译库源码时编译器的问题。
我之前都是用VS2019编译的protobuf库,这个库只能VS项目使用。
QT项目这边我是mingw,用不了VS编译的库。(现在想想,也许msvc就可以使用了?不想试,留个疑问吧。)
因此,解决方式就是用QT的gcc g++编译器来编译protobuf库。
我是参考这篇博客解决的:
https://blog.csdn.net/akkk1kkka/article/details/105193654
说起来,C++太多编译器了,有时候这个编译器不行,必须换个编译器才可以。
java好像就不会出现这种情况吧。