几个相同进程之间的IPC通信

时间:2011-04-23 18:51:21

标签: linux ipc broadcast

上下文:Linux(Ubuntu),C

我在一个盒子上产生了几个相同的简约过程。这些流程正在进行一些网络化,并且大部分时间都停留在poll(或select或其他任何东西 - 我可以根据需要更改它。)

runit使用multiwatch监控流程生命周期(如果更改了内容)。

随机的一个进程可能会不时地决定它要向所有其他进程发送消息(即一堆数据)(如果它使事情变得更简单,则包括它自己)。

此外,人工操作员有时可能希望从命令行发送此类消息(假设我可以根据需要编写命令行工具) - 再次,发送到每个进程。

必须保证邮件传递。但是如果任何(或所有)接收者突然消失,它不应该阻止发送者(OTOH,如果他们活着但很忙,他们最终必须收到消息。)如果收件人进程在轮询中空闲,它必须被消息唤醒。

在不增加复杂性的情况下,组织此通信的最有效方法是什么?

注意:由于技术原因,我不能使用POSIX信号在进程之间进行通信。

2 个答案:

答案 0 :(得分:1)

广播和可靠这些术语有点反对,我认为你必须建立所有可靠的单播连接并自己实施“广播”。

我写了一些集群软件,其中局域网上的节点需要找到彼此并建立可靠的通信 - 其方案如下:

  • 每个进程都配置了相同的端口号和LAN广播地址
  • 每个进程将tcp侦听器绑定到随机本地端口
  • 每个进程绑定到指定的本地UDP端口,侦听广播
  • 每个进程每隔几秒发送一条消息,宣告其存在,ID(例如PID)和TCP端点
  • 当进程发现具有较低ID的另一个进程时,它会建立与其的TCP连接,并可选地请求已知对等方列表

此后,每个进程都连接到其他进程,您可以手动实现“可靠的广播”。

答案 1 :(得分:1)

我知道这个帖子已经很老了,以为答案可能会帮助那些人。我使用过Kbus,发现它非常适合在多个进程中广播消息。它是一个Linux内核模块,带有一个用户库,用于处理创建描述符所需的内容。使用发布/订阅设计模式,使其成为一个解耦系统。

来源: https://github.com/kynesim/kbus

文档: https://kbus.readthedocs.io/en/latest/

Simith