csh*_*net 6 .net c# c++ ipc broadcast
所以我们在产品中有这种不寻常的需求.我们在本地主机上运行了许多进程,需要构建它们之间的通信方式.困难在于......
一些更重要的细节......
我们需要发送的"消息"本质上是微不足道的.消息类型的名称和单个字符串参数就足够了.
通信不一定是安全的,不需要提供任何认证或访问控制手段; 但是,我们希望通过Windows登录会话对通信进行分组.这里可能感兴趣的是,非升级过程应该能够与升高的过程相互作用,反之亦然.
我的第一个问题是:是否存在一个现有的开源库?或者可以用来轻松实现这一目标的东西.截至目前我还没有找到任何东西:(
如果这个库不存在那么......你会用什么技术来解决这个问题?套接字,命名管道,内存映射文件,事件句柄?似乎基于连接的传输(套接字/管道)在完全连接的图形中是个坏主意,因为n个节点需要n(n-1)个连接.使用事件句柄和某种形式的共享存储似乎是目前最合理的解决方案......
更新
它必须可靠且有保证吗?是的,没有......让我们说如果我正在倾听,而且我在合理的时间内做出回应,那么我应该总是得到这个消息.
什么是典型的邮件大小?少于100个字节,包括消息标识符和参数.这些都很小.
我们在谈论什么消息率?低吞吐量是可以接受的,每秒10个会很多,平均使用率大约是每分钟1个.
涉及的流程数量是多少?我希望它处理0到50之间,平均值在5到10之间.
我不知道任何已经存在的东西,但你应该能够通过以下组合来构建一些东西:
这可以以不需要“主”进程的方式构建,因为所有这些都可以创建为命名对象,然后由操作系统管理,并且在最后一个客户端使用它们之前不会被销毁。基本思想是,启动的第一个进程创建您需要的对象,然后所有其他进程连接到这些对象。如果第一个进程关闭,只要至少有一个其他进程维护它们的句柄,这些对象就会保留下来。
内存映射文件用于在进程之间共享内存。互斥体提供同步以防止同时更新。如果您想允许多个读取器或一个写入器,您可以使用几个互斥锁和一个信号量构建类似读取器/写入器锁的东西(请参阅是否有全局命名的读取器/写入器锁?)。事件用于在发布新消息时通知每个人。
我已经就一些重要的技术细节挥手了。例如,知道何时重置事件有点困难。您可以让每个应用程序轮询更新。
但走这条路将提供一种无连接的信息共享方式。它不需要“服务器”进程始终运行。
对于实现,我建议用 C++ 实现,并让 C# 程序通过 P/Invoke 调用它。或者也许在 C# 中并让 C++ 应用程序通过 COM 互操作调用它。当然,这是假设您的 C++ 应用程序是本机应用程序而不是 C++/CLI。
| 归档时间: |
|
| 查看次数: |
1766 次 |
| 最近记录: |