Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 单源推送:如何每5分钟向50000个客户端发送5kb_Sockets_Udp_Comet_Duplex - Fatal编程技术网

Sockets 单源推送:如何每5分钟向50000个客户端发送5kb

Sockets 单源推送:如何每5分钟向50000个客户端发送5kb,sockets,udp,comet,duplex,Sockets,Udp,Comet,Duplex,我需要实现一个客户机-服务器体系结构,其中服务器发送 通过互联网向许多客户发送相同的消息。 我需要每5分钟发送一条关于的信息。 消息不会超过5KB。 我需要解决方案扩展到大量连接的客户端(50.000-100.000) 我考虑了一系列解决方案: TCP套接字 UDP多播 WCF http双工服务(comet) 我认为我必须放弃UDP解决方案,因为它只适用于同一网络上的客户端,并且在internet上不起作用。 我在某个地方读到,如果连接了许多客户端,WCF多播将导致瓶颈,但我找不到任何显示性

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

我考虑了一系列解决方案:

  • TCP套接字

  • UDP多播

  • WCF http双工服务(comet)

我认为我必须放弃UDP解决方案,因为它只适用于同一网络上的客户端,并且在internet上不起作用。 我在某个地方读到,如果连接了许多客户端,WCF多播将导致瓶颈,但我找不到任何显示性能统计数据的文档。 在我看来,Tcp套接字似乎是要选择的解决方案。 你觉得怎么样?我说得对吗


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


考虑到在我的例子中可靠性不是一个关键点,udp多播是一个不错的选择。 net框架提供了非常有用的类来实现这一点。 我可以很容易地启动一个UdpClient,并使用两行代码开始在多播地址上发送数据。 在客户端,这真的很容易实现。 有一个UdpSingleSourceMulticastClient类正好满足我的需要。
考虑到可靠性和安全性,.net framework提供了一种智能而简单的方法来处理DoS攻击、DNS重新绑定攻击和反向隧道攻击,如下所述:

单播(tcp套接字)对于此类流量相对较小的通信量可以很好地工作,但要保持多播技术的领先地位,情况每年都在变化。

主要的问题是:你在乎更新是否传到客户那里吗

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

如果您有一个像样的体系结构,那么使用TCP实现50-100k具有这种流量级别的连接应该不会那么困难

请看这里的一些博客文章,我已经做了关于这个主题

下面是一些示例代码,用于向许多客户机发送数据


UDP将在互联网上工作,事实上,这是低延迟服务(如Skype视频聊天、在线游戏)等的工作方式。我不确定UDP多播本身,但如果您必须同时向50k-100k客户端发送消息,那么即使每个客户端都有一个单独的UDP数据包,其开销也会比TCP少得多,更不用说WCF(它本身是在TCP之上实现的)。WCF公开了多个网络协议(最显著的是TCP)并且可以通过编写WCF传输通道扩展到其他网络协议。WCF通过其扩展性模型支持UDP,基本UDP通道的代码应作为代码示例在WinFX®SDK中提供,以供参考!你的文章很有趣。在我看来,可靠性不是一个关键点。我正在考虑在.net框架之上实现这个解决方案。System.Net.Sockets命名空间有一个看起来不错的UdpSingleSourceMulticastClient。我在这里看到了一篇好文章。它展示了如何实现对接收到的数据包发送确认(ACK)的可靠性。请让我知道你的想法。