我在本地网络A和B上有两个应用程序,应用程序A应该是服务器 并向应用程序B的所有实例广播数据数组,如果应用程序B的任何实例收到此数组的项目,则另一个B实例将不会收到此项目, 还有任何实例,如果应用程序B能够在应用程序A启动之前或之后启动(两个应用程序之间的通信将不起作用)。 .NET中应用此方案的最佳技术或方法是什么?。
答案 0 :(得分:1)
单次发送意味着这不是真正的广播:您不能“广播”并将其限制为一个接收者。工作A的需要意味着它不能是TCP套接字。
听起来你想要一个中间的中间件盒作为工作队列。 A可以将项添加到队列中,B的实例可以使项目出列。我会使用类似redis的东西,因为设置,免费且非常高效是微不足道的。在redis的上下文中,A会调用RPUSH
(将新项目放在最后),每个B都会调用LPOP
(从一开始就删除项目)。当不是数据时,每个B都可以定期轮询;当它删除数据时,它只能在循环中LPOP
直到数据用完,然后定期轮询。如果你不想紧紧地循环,还有一个阻塞弹出(BLPOP
),但我不是那个人的粉丝;如果我需要立即知道新数据,我宁愿使用内置的pub / sub(PUBLISH
/ SUBSCRIBE
)发送“有新数据”的消息,只是让客户看到{ {1}}。
.NET可以使用各种redis客户端。
除了提到的各个命令之外,上述大多数命令都会转换为任何形式的消息总线; MSMQ等