上下文:Linux(Ubuntu),C
我在一个盒子上产生了几个相同的简约过程。这些流程正在进行一些网络化,并且大部分时间都停留在poll
(或select
或其他任何东西 - 我可以根据需要更改它。)
runit
使用multiwatch
监控流程生命周期(如果更改了内容)。
随机的一个进程可能会不时地决定它要向所有其他进程发送消息(即一堆数据)(如果它使事情变得更简单,则包括它自己)。
此外,人工操作员有时可能希望从命令行发送此类消息(假设我可以根据需要编写命令行工具) - 再次,发送到每个进程。
必须保证邮件传递。但是如果任何(或所有)接收者突然消失,它不应该阻止发送者(OTOH,如果他们活着但很忙,他们最终必须收到消息。)如果收件人进程在轮询中空闲,它必须被消息唤醒。
在不增加复杂性的情况下,组织此通信的最有效方法是什么?
注意:由于技术原因,我不能使用POSIX信号在进程之间进行通信。
答案 0 :(得分:1)
广播和可靠这些术语有点反对,我认为你必须建立所有可靠的单播连接并自己实施“广播”。
我写了一些集群软件,其中局域网上的节点需要找到彼此并建立可靠的通信 - 其方案如下:
此后,每个进程都连接到其他进程,您可以手动实现“可靠的广播”。
答案 1 :(得分:1)
我知道这个帖子已经很老了,以为答案可能会帮助那些人。我使用过Kbus,发现它非常适合在多个进程中广播消息。它是一个Linux内核模块,带有一个用户库,用于处理创建描述符所需的内容。使用发布/订阅设计模式,使其成为一个解耦系统。
来源: https://github.com/kynesim/kbus
文档: https://kbus.readthedocs.io/en/latest/
Simith