说明
近来有一个项目,是一个单机程序,将不同的功能拆分为不同的进程,进程间采用进程通信。看到Qt提供了QLocalServer+QLocalSocket作为本地进程通信的功能。本来程序就是Qt,这样也能简化程序对其他外部库的使用。想法是好的,项目进行了一两个月了,问题终于还是发现了…
先说明,我使用的qt是5.14.2,最新的版本好像已到6.18+版本了,是不是以前的bug未可知。这是我第一次使用QLocalServer控件。
4个进程,启动时,建立连接,数据是实时推送的,Qt这种进程通信其实也跟网络通信类似,只是使用起来更简单。都是通过socket进行调用。这里就不细说了。
开始并未发现这个数据随机丢失的问题,几天前发现数据不连续,于是降低了发送频率,能够解决一定的数据丢失问题。然其实并未有完全解决。后面发现数据的一一对应关系,发现对不上才发现问题真的很严重。
担心主线程忙不过来,便将接收放到单独线程…
怀疑qt信号槽太慢,不能立即发送,于是建立发送线程,缓冲数据定时发送…
怀疑写法不正确,重新写了一遍…
…
做了很多的尝试,发现丢失问题一直还是存在…
*,调了三天,眼睛都调瞎了…
解决方案
最后是放弃了QLocalServer的方案,采用其他网络中间件解决的,比如Kafka或者opendds,这下终于好了…
总结
QLocalServer进程通信的方案不适用于频繁交互,其实也没有太多用。只适合本机的进程通信,关键还是不可靠的通信,要你何用?用网络通信的方式本就能解决,倒搞得自己头大…
编辑:myhappyandy