2017-06-19 44 views
0

我想優化一個UDP服務器來處理更多的吞吐量,它基於Java IO數據報套接字(而不是NIO)。當這個UDP服務器收到一個UDP包時,它需要處理這個包,並將處理後的數據發送到後臺資源,然後響應客戶端。 目前這個服務器將爲每個傳入數據包分配一個線程進行處理。使用數據報通道相比於數據報套接字有什麼優勢

我讀過一些文章,我明白了 某些情況下,例如,聊天服務器基於TCP:需要 同時管理成千上萬打開的連接,每個只發送一個小的數據,實現服務器在NIO中可能是一個優勢。 很少有線程可以處理大量連接(Thread Per Request),因爲只有少數連接在給定的時間點向服務器發送請求。所以,我們不需要爲每個連接維護一個線程。 這是使用Java TCP NIO的巨大優勢。在UDP中,每個數據包(數據報)實際上都是一個自包含的消息,每個數據包可以被認爲是一個請求,即使我們使用NIO數據報通道,我們仍然需要爲每個請求創建一個線程。

那麼,使用NIO Datagram通道有什麼好處呢?

回答

1

即使我們使用NIO數據報通道,我們還需要創建一個線程爲每個請求

爲什麼?不是如果你是一個回聲服務器,時間服務器,......它完全取決於你在做什麼。

,你可能會考慮每客戶一個線程,而不是每個請求,如果您的應用程序是這樣的:clietns保持請求(而不是一次性的要求:例如時間或DNS)。

你的假設不經過審查。

但是 NIO確實是超賣,大多數應用程序並不需要它。那裏有服務器支持數千個處於阻塞模式的連接。

+0

感謝EJP的迴應!服務器不是迴應服務器,也不是時間服務器。當這個UDP服務器接收到一個UDP數據包時,它需要處理這個數據包,並將處理後的數據發送到後臺MQ,然後響應客戶端。目前,該服務器爲每個傳入UDP數據包創建一個新線程來處理它。我的問題是,如果我們使用NIO數據報通道,優勢和差異是什麼。 – Zhi

+0

根據你的描述,很少或沒有。 – EJP

相關問題