2

我需要实现一个客户端服务器架构,其中服务器通过互联网向许多客户端发送相同的消息。我需要大约每 5 分钟发送一条消息。消息不会超过 5KB。我需要将解决方案扩展到连接的大量客户端(50.000-100.000)

我考虑了一堆解决方案:

  • TCP 套接字

  • UDP组播

  • WCF http 双工服务(彗星)

我认为我必须放弃 UDP 解决方案,因为它仅适用于同一网络上的客户端,并且无法在 Internet 上运行。我在某处读到,如果我连接了许多客户端,WCF 多播会导致瓶颈,但我找不到任何显示性能统计信息的文档。Tcp 套接字在我看来是选择的解决方案。你有什么想法?我对么?


当我说 UDP 在互联网上不起作用时,我肯定是错的……我之所以这么想是因为我读了一些文章,指出您需要在网络中正确配置路由器以支持多播……我读到了 udp 端口​​多播范围,并认为它是本地的。相反,可以通过 Internet 访问范围 224.0.0.1 - 239.255.255.255(D 类地址组)


考虑到在我的情况下可靠性不是关键点,udp 多播是一个不错的选择。.net 框架提供了非常有用的类来实现这一点。我可以轻松地启动 UdpClient 并使用两行代码开始在多播地址上发送数据。在客户端,这真的很容易。有一个 UdpSingleSourceMulticastClient 类正是我需要的。对于可靠性和安全性,.net 框架有一种智能且简单的方法来处理 DoS 攻击、DNS 重新绑定攻击和 Revers 隧道攻击,如下所述:http: //msdn.microsoft.com/en-us/library/ee707325 (v=vs.95).aspx

4

2 回答 2

1

主要问题是:您是否关心更新是否到达客户端?

如果你这样做了,那么你将需要在 UDP 之上构建一些东西来增加可靠性。UDP 数据报不可靠,因此您应该期望有些数据报不会到达目的地。如果您要快速推出 UDP 数据报,则更有可能发生这种情况。请注意,在某些使用 UDP 的情况下,您的客户端可能还会获得同一数据报的多个副本。

如果您有一个不错的架构,那么使用 TCP 实现具有这种流量级别的 50-100k 连接应该不难。

请参阅此处了解我在该主题上所做的一些博客文章。

这是一些处理向许多客户端发送数据的示例代码。

于 2011-04-12T10:58:53.877 回答
0

单播(tcp 套接字)对于像这样的相对少量的流量可以正常工作,但是随着多播技术的发展,情况每年都在变化。

于 2011-04-11T19:39:26.703 回答