簡體   English   中英

廣播到多個客戶端的MulticastSocket與DatagramSocket

[英]MulticastSocket vs. DatagramSocket in Broadcasting to Multiple Clients

當一個服務器向多個客戶端廣播時,哪個是更快/更高效的實現:MulticastSocket還是DatagramSocket?

請討論一下解釋,謝謝!

傳遞的消息涉及字符串和浮點數。

決定因素通常是客戶端是否在相同或其他多播啟用/鏈接網絡上。 通常,多播將比任何形式的單播更有效,但是,多播不可靠,並且不能在諸如因特網之類的異構網絡中工作,其中運營商傾向於禁用多播流量。

如果數據需要可靠,那么你確實需要使用TCP單播,或者在多播中添加某種形式的FEC,以便為數據流提供可靠性,如果流量需要通過互聯網傳輸,那么你必須使用單播TCP或UDP。

簡短版本:如果您的數據很小,需要可靠,遍歷互聯網或不經常發送,請使用單播。 如果您的數據很大,交付給大量客戶端,可以容忍一些損失,並且只遍歷您控制的網絡或啟用了多播,請使用多播。 多播實際上是一個單一的小馬,(通過同質網絡廣播不可靠的數據),而單播可以做任何事情,但具有更高的開銷。

注意:超過一定數量的數據丟失的TCP也不再可靠(導致斷開連接),並且來自單播的增加的流量可以將該限制降低,因為它會增加數據流量。 FEC為即使是非常多的客戶端增加了相對固定的開銷,但是有一點,FEC和單播都不再有幫助,而您只需要重新設計網絡以實現可行的解決方案。

如果您有多個子網絡上的客戶端,則多播是最佳選擇。 如果您只發送一個子網絡數據,則廣播可以稍微提高效率。 然而,通常使用多播,因為差異是相當脆弱的。

數據包含的內容並不重要。

您可能會發現,如果您需要可靠的交付,使用TCP更簡單,在某些情況下甚至可能更快(因為路由器傾向於針對TCP進行優化)如果交付不需要可靠,則使用多播。

你的問題不清楚。 如果您正在廣播它是否使用DatagramSocketMulticastSocket沒有任何區別。 如果您詢問多播是否比廣播更有效,(a)答案為“是”,(b)您必須使用MulticastSocket接收多播; 再次發送它們,你可以使用DatagramSocketMulticastSocket ,效率沒有差別。

多播比數據報套接字更有效,但是它也使用UDP,因此不保證所有接收器都將接收數據包。 除非您在網絡中進行了托管切換,這會優先處理您的數據包,否則您最有可能以任何隨機順序丟失數據包,無論您的網絡使用情況如何。

如果網絡中的設備數量有限,需要監聽多播,我建議對每台設備進行TCP單播,並使用某種網絡服務發現來查找設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM