MulticastSocket与DatagramSocket在广播到多个客户端的比较



哪一个将是一个更快/更有效的实现当一个服务器广播到多个客户端:MulticastSocket或DatagramSocket?

也请讨论一个解释,谢谢!

传递的消息包括字符串和浮点数

决定因素通常是客户端是否在相同的网络上,或者是否在启用多播/链接的网络上。一般来说,多播将比任何形式的单播更有效,然而,多播不可靠,并且不能跨异构网络工作,如互联网,运营商倾向于禁用多播流量。

如果数据需要可靠,那么你确实需要使用TCP单播,或者在多播中添加某种形式的FEC以赋予数据流表面上的可靠性,如果流量需要通过互联网传输,那么你必须使用TCP或UDP单播。

短版本:如果您的数据很小,需要可靠,遍历互联网或不经常发送,请使用单播。如果您的数据很大,要交付给大量的客户端,可以容忍一些丢失,并且只遍历您控制的网络或启用了多播的网络,则使用多播。组播实际上是一个小技巧(在同质网络上不可靠的数据广播),而单播可以做大多数事情,但开销更高。

注意: TCP超过一定数量的数据丢失也不再是可靠的(导致断开连接),并且单播增加的流量可以降低该限制,因为它增加了数据流的数量。FEC为大量的客户端增加了相对固定的开销,但是在某种程度上,FEC和单播都不再有帮助,您只需要重新设计网络以实现可行的解决方案。

如果您在多个子网上有客户端,则多播是最佳选择。如果您只发送一个子网的数据,广播的效率可能会稍微高一些。然而,多播通常被使用,因为它们之间的区别非常微弱。

数据包含什么并不重要。

你可能会发现,如果你需要可靠的传输,使用TCP更简单,甚至在某些情况下更快(因为路由器倾向于为TCP进行优化),如果传输不需要可靠,使用多播。

你的问题不清楚。如果你在广播,用DatagramSocket还是MulticastSocket没有任何区别。如果你问组播是否比广播更有效,(a)答案是"是",(b)你必须使用MulticastSocket接收组播;对于发送,同样,您可以使用DatagramSocketMulticastSocket,并且效率没有差异。

组播比数据报套接字更有效,然而,它也使用UDP,因此不能保证数据包将被所有接收者接收。除非您在网络中有一个托管交换机,它可以优先处理您的数据包,否则无论您的网络使用情况如何,您都很可能以任意随机顺序丢失数据包。

如果您的网络中需要侦听多播的设备数量有限,我建议对每个设备进行TCP单播,并使用某种网络服务发现来查找您的设备

最新更新