1

我在本地网络 A 和 B 上有两个应用程序,应用程序 A 应该是服务器,并向应用程序 B 的所有实例广播一个数据数组,如果应用程序 B 的任何实例收到该数组的一个项目,另一个 B 实例将不会接收此项目,如果应用程序 B 能够在应用程序 A 启动之前或之后启动(两个应用程序之间的通信将不起作用),则接收此项目。.NET 中应用此方案的最佳技术或方法是什么?

4

1 回答 1

1

单次交付意味着这不是真正的广播:您不能“广播”并将其限制为一个接收器。需要使用 A 意味着它不能是 TCP 套接字。

听起来您想要一个中间件盒作为工作队列。A 可以将项目添加到队列中,B 的实例可以将项目出列。我会使用 redis 之类的东西,因为它易于设置、免费且非常高效。在 redis 的上下文中,A 会调用RPUSH(将新项目放在末尾),每个 B 会调用LPOP(从开头删除项目)。当没有数据时,每个 B 可以简单地定期轮询;当它删除数据时,它可以LPOP循环直到数据用完,然后定期轮询。BLPOP如果您不想紧紧循环,还有一个阻塞 pop ( ),但我个人不喜欢它;如果我需要立即知道新数据,我宁愿使用内置的 pub/sub ( PUBLISH/SUBSCRIBE) 发送一条“有新数据”消息,让客户端看起来像LPOP.

.NET 可以使用各种 redis 客户端。

除了提到的个别命令外,上述大部分命令都可以转换为任何形式的消息总线;MSMQ 等

于 2013-03-14T08:08:52.807 回答