进程间通信/广播

Posted

技术标签:

【中文标题】进程间通信/广播【英文标题】:Interprocess Communication / Broadcast 【发布时间】:2009-12-21 15:22:57 【问题描述】:

我有一个 Windows 服务(用 C# 实现),我有一个类似服务控制管理器的东西。我想跟踪从服务到服务控制管理器(这是一个窗口窗体应用程序)的消息,但我不确定这样做的最佳方法是什么。该服务应将消息广播给所有以非阻塞方式列出的客户端。

我考虑过使用命名管道或邮槽,但我不确定是否有更好的方法来做到这一点(我也不确定我是否可以使用这种技术实现广播)。

任何建议都将不胜感激。

【问题讨论】:

【参考方案1】:

如果有多个客户端在监听,我认为命名管道会做更多的工作。我认为在这种情况下共享内存会更简单。如果客户端可能在单独的机器上,那么在不涉及大量数据的情况下,多播之类的东西可能是传输信息的一种简单方法。但是,多播范围通常仅限于单个子网,除非路由器专门配置为多播。

【讨论】:

感谢您的回复。客户端都在同一台机器上,因此我想避免涉及网络堆栈。共享内存听起来像是一种选择。但我更愿意为此使用 Windows 消息(尽管在 C# 中使用它们似乎有点麻烦) 我同意您在这种情况下避免使用网络的评估。另一种可能更灵活的可能性,尤其是对于未来的更新,是使用 .Net Remoting (msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx)。这可能是“官方”正确的做法。

以上是关于进程间通信/广播的主要内容,如果未能解决你的问题,请参考以下文章

Android广播实现进程间通信,很简单

广播自定义消息实现进程间的通信问题

需要帮助设计进程间通信层

android AIDL基础

VC++ 进程间的通信

Linux系统编程--进程间通信 ---管道篇