4

我正在寻找一种可以由在同一台机器上运行的.NET 应用程序使用的发布/订阅机制(不同应用程序域和进程的混合)。我真的宁愿避免运行单独的服务或任何需要太多配置的东西。显然,我也希望将内存和 cpu 负载保持在最低水平。

具体来说,我想向同一主机上的订阅者广播大量的小消息。所以我想要一个总线(例如 MSMQ 或 NServiceBus)——但我不想要完整网络支持的开销(它只需要本地命名管道)或企业总线的成本和复杂性。

4

5 回答 5

4

命名管道是进行本地进程交互的最快方式。

参考:
NamedPipeServerStream
NamedPipeClientStream
Choosing a transport

重要阅读:
不要陷入僵局

于 2011-11-29T12:22:22.673 回答
1

如果您只想将信号从一个进程发送到另一个进程,表明某部分工作已完成,那么最轻量级的解决方案可能是mutex

于 2011-11-29T12:36:45.213 回答
1

我猜如果配置正确,MSMQ + NServiceBus 将能够在单台机器上实现您想要的吞吐量。有一个 [Express] 属性会导致您的消息不被写入磁盘。如果性能足够,那么使用像这样的高级框架比使用自己的框架要好得多。

于 2011-11-29T12:42:52.650 回答
0
Mailslots
Memory Mapped files
Named Pipes
LPC

全部在 Windows 上

于 2011-11-29T12:39:56.880 回答
0

这不是我的最终解决方案,但出现的一个解决方案是0MQ,它提供了可靠的发布/订阅模式,并且对配置和基础架构的要求相对较低。缺点是它的级别相对较低(.NET API 是原生 C 代码的包装器)——所以我需要实现所有的序列化等等。

当我有时间进行实验并得出结论时,我会回复。

于 2011-11-29T14:56:37.800 回答