【发布时间】:2011-06-27 19:02:48
【问题描述】:
所以我们的产品中有这种不寻常的需求。我们在本地主机上运行着许多进程,需要在它们之间构建一种通信方式。困难在于...
- 没有“服务器”或主进程
- 消息将广播到所有监听节点
- 节点都是 Windows 进程,但可能是 C++ 或 C#
- 节点将同时在 32 位和 64 位下运行
- 任何节点都可以随时跳入/跳出对话
- 异常终止的进程不应对其他节点产生不利影响
- 响应缓慢的进程也不应该对其他节点产生不利影响
- 节点无需“监听”即可广播消息
一些更重要的细节......
我们需要发送的“消息”本质上是微不足道的。消息类型的名称和单个字符串参数就足够了。
通信不一定是安全的,也不需要提供任何身份验证或访问控制手段;但是,我们希望通过 Windows 登录会话对通信进行分组。这里可能有趣的是,非提升的进程应该能够与提升的进程交互,反之亦然。
我的第一个问题:是否有现成的开源库?或者可以用来轻松实现这一目标的东西。到目前为止,我还没有找到任何东西:(
如果不存在用于此的库,那么...您将使用哪些技术来解决此问题?套接字、命名管道、内存映射文件、事件句柄?在完全连接的图中,基于连接的传输(套接字/管道)似乎不是一个好主意,因为 n 个节点需要 n(n-1) 个连接。使用事件句柄和某种形式的共享存储似乎是目前最合理的解决方案……
更新
是否必须可靠且有保证?是的,也不是……假设我在倾听,并且在合理的时间内做出回应,那么我应该总是能收到信息。
典型的邮件大小是多少?少于 100 个字节,包括消息标识符和参数。它们很小。
我们所说的消息速率是多少?低吞吐量是可以接受的,每秒 10 个会很多,平均使用量约为每分钟 1 个。
涉及的进程数是多少?我希望它处理 0 到 50 之间,平均值在 5 到 10 之间。
【问题讨论】:
-
它必须是可靠和有保证的吗?典型的消息大小是多少?我问的原因是,您可以在环回设备上使用 UDP 端口,并且您要发送的每个“消息”都可以封装在一个数据包中,任何连接到环回端口的进程理论上都应该看到该数据包(如只要你启用了reuseaddr)。