首页| 论坛| 消息

回复: QT编写的基于内存共享方式的进程间通信
#16 回 timer3309 的帖子 [圣域天子 03-25 18:08]
timer3309:补充一句,请私密我的朋友也看下。

用共享内存并不是做进程间通信的唯一办法。当然是有它的优势,但是接口太简单是硬伤。直接的问题是,数据是共享了,共享内容变化了,咋通知呢?QT 也有 qdbus 这样的模块,但是win下不能用,这。。。也有RPC之类的扩展库,没有发现好用的。

.. (2017-03-25 13:32) 
实现的方式有很多种,大家可以百花齐放。
我个人其实更常用QLocalServer & QLocalSocket,它完全类似网络接口,不同进程可以简单修改后变成基于网络的程序,而不仅仅限制在同一台机器上
#17 回 timer3309 的帖子 [stlcours 03-26 06:08]
timer3309:补充一句,请私密我的朋友也看下。

用共享内存并不是做进程间通信的唯一办法。当然是有它的优势,但是接口太简单是硬伤。直接的问题是,数据是共享了,共享内容变化了,咋通知呢?QT 也有 qdbus 这样的模块,但是win下不能用,这。。。也有RPC之类的扩展库,没有发现好用的。

.. (2017-03-25 13:32) 
能给一个例子吗?最好是和QT相关的例子。
#18 [timer3309 03-26 17:37]
基于信号-槽的扩展网络通信库的接口,直接的问题就是信号槽机制的处理性能不够好。在我的经验中,我们很少会依赖于信号槽去实现通信,即使我们用QT来开发我们的系统。以 QLocalServer 为例,需要简单修改本身就是一件可大可小的事情。在ZMQ中,可以做到,改改配置参数就好了,更灵活一些。
ZeroMQ的例子非常的简单,请感兴趣的翻翻书的前三章,应该就能用上了。
ZeroMQ,可以理解为以域套接字,socket 为底层支持,在应用层进行接口封装后的消息库,提供了相比使用Socket直接进行tcp udp 通信更加抽象的“”对象“”,比如:push-pull(消息推送), publish-sub(订阅发布) 以及 代理,路由,这些模式被集成在库中,不用自己再去“”创造性的使用socket“”进行进程通信了,库提供了常用的消息模式。
ZeroMQ 与 QT 没有必然的关系,所以我不能提供与QT相关的例子。你在C/C++中使用ZeroMQ 比使用QT更加轻量,而QT现在更像是C++的一种标准开发环境。另外就是ZeroMQ 有其它多种语言的绑定比如Java 等,因此在构建一个更加复杂的系统的时候,你可能必须跳开用QT才适合解决的问题,但ZMQ会成为一个像胶水一样的库,用来把你的系统粘成一个整体。
以上纯粹是个人经验,各位大牛见笑。使用不使用ZMQ做进程间通信,并不是一个多么了不得的问题,同样有很多C/C++的问题,ZMQ 搞不定或者搞的不太行。

<< 2 3 4 >> (4/4)

回复 发表
主题 版块