【发布时间】: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 中提供