当一台服务器向多个客户端广播时,哪种实现更快/更高效:MulticastSocket或DatagramSocket?
请讨论一下解释,谢谢!
传递的消息涉及字符串和浮点数。
答案 0 :(得分:5)
决定因素通常是客户端是否在相同或其他多播启用/链接网络上。一般而言,多播比任何形式的单播都要高效,但多播并不可靠,并且不能在互联网等异构网络上运行,运营商往往会禁用多播流量。
如果数据需要可靠,那么您确实需要使用TCP单播,或者在多播中添加某种形式的FEC,以便为数据流提供相似的可靠性,并且如果流量需要通过互联网,然后你必须使用单播TCP或UDP。
短版本:如果您的数据很小,需要可靠,遍历互联网或不经常发送,请使用单播。如果您的数据很大,交付给大量客户端,可以容忍一些损失,并且只遍历您控制的网络或启用了多播,请使用多播。多播真的是一个小技巧,(通过同质网络广播不可靠的数据),而单播可以做任何事情,但开销更高。
注意:超过一定数量的数据丢失的TCP也不再可靠(导致断开连接),并且来自单播的附加流量可以将该限制降低,因为它会增加数据流的数量。即使是非常多的客户,FEC也会增加一个相对固定的开销,但是FEC和单播都不再有帮助,你需要重新设计网络以实现可行的解决方案。
答案 1 :(得分:2)
如果您有多个子网络上的客户端,则多播是最佳选择。如果您只发送一个子网络数据,则广播可以稍微提高效率。然而,通常使用多播,因为差异非常微弱。
数据包含的内容并不重要。
您可能会发现,如果您需要可靠的交付,使用TCP更简单,在某些情况下甚至可能更快(因为路由器往往针对TCP进行优化)如果交付不需要可靠,请使用多播。
答案 2 :(得分:2)
你的问题不清楚。如果您正在广播,那么无论您使用DatagramSocket
还是MulticastSocket
,都没有任何区别。如果您询问多播是否比广播更有效,(a)答案为“是”,(b)您必须使用MulticastSocket
接收多播;对于发送,再次,您可以使用DatagramSocket
或MulticastSocket
,效率没有差异。
答案 3 :(得分:0)
多播比数据报套接字更有效,但它也使用UDP,因此不保证所有接收器都将接收数据包。除非您在网络中进行了托管切换,这会优先处理您的数据包,否则您最有可能以任何随机顺序丢失数据包,无论您的网络使用情况如何。
如果网络中的设备数量有限,需要监听多播,我建议对每台设备进行TCP单播,并使用某种网络服务发现来查找设备。