QLocalServer+QLocalSocket进程间通信数据随机丢失踩坑

说明

近来有一个项目,是一个单机程序,将不同的功能拆分为不同的进程,进程间采用进程通信。看到Qt提供了QLocalServer+QLocalSocket作为本地进程通信的功能。本来程序就是Qt,这样也能简化程序对其他外部库的使用。想法是好的,项目进行了一两个月了,问题终于还是发现了…

在这里插入图片描述
先说明,我使用的qt是5.14.2,最新的版本好像已到6.18+版本了,是不是以前的bug未可知。这是我第一次使用QLocalServer控件。

4个进程,启动时,建立连接,数据是实时推送的,Qt这种进程通信其实也跟网络通信类似,只是使用起来更简单。都是通过socket进行调用。这里就不细说了。

开始并未发现这个数据随机丢失的问题,几天前发现数据不连续,于是降低了发送频率,能够解决一定的数据丢失问题。然其实并未有完全解决。后面发现数据的一一对应关系,发现对不上才发现问题真的很严重。
担心主线程忙不过来,便将接收放到单独线程…
怀疑qt信号槽太慢,不能立即发送,于是建立发送线程,缓冲数据定时发送…
怀疑写法不正确,重新写了一遍…

做了很多的尝试,发现丢失问题一直还是存在…

*,调了三天,眼睛都调瞎了…

解决方案

最后是放弃了QLocalServer的方案,采用其他网络中间件解决的,比如Kafka或者opendds,这下终于好了…

总结

QLocalServer进程通信的方案不适用于频繁交互,其实也没有太多用。只适合本机的进程通信,关键还是不可靠的通信,要你何用?用网络通信的方式本就能解决,倒搞得自己头大…

编辑:myhappyandy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值