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

时间:2011-12-19 08:35:26

标签: java networking broadcasting

当一台服务器向多个客户端广播时,哪种实现更快/更高效:MulticastSocket或DatagramSocket?

请讨论一下解释,谢谢!

传递的消息涉及字符串和浮点数。

4 个答案:

答案 0 :(得分:5)

决定因素通常是客户端是否在相同或其他多播启用/链接网络上。一般而言,多播比任何形式的单播都要高效,但多播并不可靠,并且不能在互联网等异构网络上运行,运营商往往会禁用多播流量。

如果数据需要可靠,那么您确实需要使用TCP单播,或者在多播中添加某种形式的FEC,以便为数据流提供相似的可靠性,并且如果流量需要通过互联网,然后你必须使用单播TCP或UDP。

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

注意:超过一定数量的数据丢失的TCP也不再可靠(导致断开连接),并且来自单播的附加流量可以将该限制降低,因为它会增加数据流的数量。即使是非常多的客户,FEC也会增加一个相对固定的开销,但是FEC和单播都不再有帮助,你需要重新设计网络以实现可行的解决方案。

答案 1 :(得分:2)

如果您有多个子网络上的客户端,则多播是最佳选择。如果您只发送一个子网络数据,则广播可以稍微提高效率。然而,通常使用多播,因为差异非常微弱。

数据包含的内容并不重要。

您可能会发现,如果您需要可靠的交付,使用TCP更简单,在某些情况下甚至可能更快(因为路由器往往针对TCP进行优化)如果交付不需要可靠,请使用多播。

答案 2 :(得分:2)

你的问题不清楚。如果您正在广播,那么无论您使用DatagramSocket还是MulticastSocket,都没有任何区别。如果您询问多播是否比广播更有效,(a)答案为“是”,(b)您必须使用MulticastSocket接收多播;对于发送,再次,您可以使用DatagramSocketMulticastSocket,效率没有差异。

答案 3 :(得分:0)

多播比数据报套接字更有效,但它也使用UDP,因此不保证所有接收器都将接收数据包。除非您在网络中进行了托管切换,这会优先处理您的数据包,否则您最有可能以任何随机顺序丢失数据包,无论您的网络使用情况如何。

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