2015-07-22 24 views
0

我正在使用Netty-3.10,我無法在Netty文檔中找到對此問題的答案。Netty在哪裏指定它將只爲每個UDP數據報調用一次流水線?

我有一個UDP Netty服務。我有一個客戶端發送UDP數據包到我的主機/端口。我的服務非常出色。

在代碼審查過程中,我得到了回推,Netty沒有明確說明它是否只將單個完整的數據報傳遞給管道。我想這是公平的,我在文檔中找不到它,即使我沒有看到UDP的使用有沒有機會工作,如果情況並非如此。例如,部分更新可能無序且與來自其他主機的數據交織在一起。

在Netty文檔中是否有地方明確指出Netty框架不會分割UDP數據包並向管道傳遞部分更新?

謝謝

回答

1

我不認爲這是一個Netty指定的規則,而是一個UDP協議。爲User Datagram Protocol的維基百科頁面稱:

數據報 - 數據包單獨發送,並檢查 完整性,只有當他們到達。數據包具有明確的界限,在接收到數據包之後 將被兌現,這意味着在接收器處的讀取操作將會產生完整的消息,如其最初發送的那樣。

因此,由於一個完整的數據報將永遠的插座上讀來生產的,它是有道理的管道總是被調用一次,只有一次,在與TCP相反,其中的邏輯傳輸可能是支離破碎,需要多個讀取。

有一個在Netty QOTM example server執行工作的有益和有些相關的說明,指出:

// Allow packets as large as up to 1024 bytes (default is 768). 
    // You could increase or decrease this value to avoid truncated packets 
    // or to improve memory footprint respectively. 
    // 
    // Please also note that a large UDP packet might be truncated or 
    // dropped by your router no matter how you configured this option. 
    // In UDP, a packet is truncated or dropped if it is larger than a 
    // certain size, depending on router configuration. IPv4 routers 
    // truncate and IPv6 routers drop a large packet. That's why it is 
    // safe to send small packets in UDP. 

這是可能的可靠性和信息聚集可能由應用程序本身來實現的,在這種情況下,更大的應用程序特定的消息可以通過一個或多個涉及多個管道調用的數據報來構建,以便彙總接收到的數據報,但是根據定義,每個單獨的數據報只會觸發一個管道調用。