我有一个应用程序A,我想与应用程序B共享一些信息。 应用程序A每次写入信息~150ms。 申请B随时阅读信息。
我搜索并找到了QSharedMemory
,看起来不错,但我的公司不会开发应用程序B,所以我无法选择编程语言。
QSharedMemory
是个好主意吗?
我怎么能这样做?
答案 0 :(得分:0)
QSharedMemory
是命名和未命名平台共享内存的瘦包装器。命名时,只要所述语言支持二进制缓冲区,就可以使用任何编程语言对其他应用程序进行内存映射和使用的文件。
我确实想知道,如果你使用管道进行IPC会不会更容易。 QLocalSocket
将其封装在Qt的末尾,另一方只使用原生管道。
共享内存仅在某些情况下才有意义,例如推送在应用程序之间可能不会发生太大变化的图像 - 从小到小的角度来看,一直推动整个图像的成本将是令人望而却步的平均带宽变化。图像不需要意味着视觉图像,它可能是工业过程图像等。
在许多情况下,共享内存是一种过早的伪优化,它使得事情变得比必要的更加困难,并且在多个通信进程的情况下,可能变得非常悲观 - 您确实为每个共享的虚拟内存支付了成本记忆段。
答案 1 :(得分:0)
听起来你需要实现一个简单的服务器,使用本地套接字它应该在带宽方面非常快并且易于开发。服务器将根据请求存储来自A的数据并将其传送给B.
显然,它没有工作,没有应用程序"之间。无论你选择共享内存还是本地套接字,你都需要一些服务器代码来运行A和B.如果A一直在运行,它很可能是它的一部分,但它也可以是独立的。
最好使用本地套接字,因为它的API在不同的编程语言中更容易移植,在这种情况下,A和B可以用任意语言和框架实现,并在套接字协议级别进行通信。使用{{1}},它在您的方案中无法移植。