上下文: Linux (Ubuntu),C
我在一个盒子上产生了几个相同的极简过程。这些进程正在进行一些网络建设,并将大部分时间停留在poll (或select或其他什么--我可以根据需要进行更改)中。
进程生存期由runit与multiwatch一起监视(如果有变化的话)。
一个随机的进程可能会不时地决定向所有其他进程发送一条消息(即一串数据)(如果它使事情变得更简单的话,也包括它本身)。
而且,人工操作符有时可能希望从命令行发送这样的消息(假设我可以根据需要编写命令行工具)--再次发送到每个进程。
必须保证消息传递。但是它不应该阻止发送者(如果有任何(或所有)收件人突然消失(OTOH,如果他们活着但忙碌,他们最终必须接收消息)。如果收件人进程在轮询中处于空闲状态,则必须由消息唤醒它。
在不增加很多复杂性的情况下,组织这种交流的最健壮的方法是什么?
注意:由于技术原因,我不能使用POSIX信号在进程之间进行通信。
发布于 2011-04-23 19:39:27
广播和可靠的条款是反对的,我认为你必须建立所有可靠的单播连接,并实现“广播”自己。
我编写了一些集群软件,其中局域网上的节点需要找到彼此并建立可靠的通信--这方面的方案如下:
每个进程配置相同的端口号和局域网广播地址( broadcasts
在此之后,每个进程都连接到其他每个进程,您可以手动实现“可靠广播”。
发布于 2017-03-22 03:10:33
我知道这条线很古老,我想答案可能会对外面的人有所帮助。我使用过Kbus,发现它非常适合跨多个进程广播消息。它是一个具有用户库的Linux内核模块,进程需要使用它来创建描述符。使用发布/订阅设计模式,使其成为一个解耦的系统。
来源:https://github.com/kynesim/kbus
博士:https://kbus.readthedocs.io/en/latest/
西米斯
https://stackoverflow.com/questions/5766196
复制相似问题