我正在寻找在 .NET Framework 上使用 UDP 多播的替代方法,并且正在寻找建议。
我需要将消息发送到运行相当多的 ASP.NET 应用程序的多个 Web 服务器。这些消息将是单向的,来自多台不同的机器。UDP 多播将是完美的,但由于它需要管理权限,我无法使用它。有关原因的详细信息,请参阅ASP.NET 多播 UdpClient 问题。
是否有其他类似的方式可以工作,允许多个应用程序接收广播类型的消息?
想到了几种可能性:
将您的多播 UDP 代码放入 Windows 服务。通过在端口上只有一个侦听器,您不需要提升权限。您可以使用共享内存或许多其他技术与服务进行通信。
使用异步点对点原始 TCP 连接到中央消息分发/中继节点。使用异步 I/O 发送和接收消息可以最大限度地减少等待时间。
在 SQL Server 中使用持久性排队机制,例如 Service Broker。它仍然是单播的,但您可以有一个将消息发送到所有端点的存储过程。同样,使用异步 I/O 来最小化等待时间。
使用超出进程的商业消息传递总线——比如 Tibco Rendezvous。
您是否考虑过使用 MSMQ 或 SQL 数据库?使用 SQL 2008 数据库,您也可以让 SQL 服务器通知您更改。
ActiveMQ 是一个类似于 msmq 的免费服务。它可以处理非持久消息,例如您的消息。缺点是它需要一个服务器,因为它基本上是作为辐条和集线器风格的方法,你有一个中央服务器。但它在 .NET 中运行良好并且具有出色的性能。我每秒通过它发送数百条消息,并且保持正常。
Redis pubsub使用StackExchange.Redis API。
简单、卓越的性能、可扩展性,如果您选择它,您一定会将它用于其他用途,例如缓存/会话管理/监控或此瑞士军刀工具包的任何其他常见用途。