【问题标题】:Single source pushing: how to send 5kb each 5 minutes to 50000 clients单源推送:如何每 5 分钟发送 5kb 给 50000 个客户端
【发布时间】:2011-04-11 19:31:15
【问题描述】:

我需要实现一个客户端服务器架构,服务器发送 通过互联网向许多客户发送相同的消息。 我需要大约每 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

【问题讨论】:

  • UDP 实际上会并且确实在互联网上工作——实际上,这就是低延迟服务(例如 Skype 视频聊天、在线游戏)等工作的方式。我不确定 UDP multicast 本身,但如果您必须同时向 50k-100k 客户端发送消息,即使是单独的 UDP 数据包到每个客户端的开销也会比TCP,更不用说 WCF(它本身是在 TCP 之上实现的)。
  • WCF 公开了多个网络协议(最显着的是 TCP),并且可以通过编写 WCF 传输通道扩展到其他网络协议。 WCF 通过其可扩展性模型支持 UDP,基本 UDP 通道的代码将作为代码示例在 WinFX® SDK 中提供

标签: sockets udp comet duplex


【解决方案1】:

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

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

如果你有一个体面的架构,50-100k 的这种流量级别的连接应该不难用 TCP 实现。

请参阅此处了解我在该主题上发表的一些博文。

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

【讨论】:

  • 感谢您的宝贵意见!你的文章很有趣。就我而言,可靠性不是关键点。我正在考虑在 .net 框架之上实现这个解决方案。 System.Net.Sockets 命名空间有一个看起来不错的 UdpSingleSourceMulticastClient。我在这里 (msdn.microsoft.com/en-us/magazine/cc163648.aspx) 看到了一篇好文章。它展示了如何实现为收到的数据包发送确认 (ACK) 的可靠性。请让我知道你的想法。
【解决方案2】:

单播(tcp 套接字)可以很好地处理这种相对少量的流量,但要保持多播技术的发展,情况每年都在变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多