2013-08-18 130 views
0

我只是想了解如何編寫一個線程每請求TCP服務器在Java中。 我已經寫了一個線程,每個連接服務器,運行的ServerSocket.accept(),並創建一個新的線程每一個新的連接到來時。線程每請求TCP服務器

這怎麼可能被修改成一個線程每個請求服務器? 我想傳入的連接可以放入某種隊列中,但是如何知道哪一個已經發出請求&已準備好進行服務?

我懷疑NIO在這裏是必要的,但不知道。

謝謝。

[編輯]

需要明確的是 - 原來的「服務器」只是一個循環,我寫了一個連接等待,然後把它傳遞給一個新的線程。

這位講師提到了「按請求線程」的架構,我想知道它是如何在「引擎蓋下」工作的。

我對它是如何工作的第一個想法可能是完全錯誤的。

+1

您不提供足夠的信息。您的原始服務器如何修改爲每個請求線程服務器的確切方式是無法回答的,因爲我們不知道您的原始服務器如何實現或者它的性質如何。對於我們所知道的,只是將配置文件中的每個連接更改爲「每個請求」,請顯示您的代碼,描述您遇到的問題,預期的和實際的結果以及您已經完成的步驟 –

+0

另外我不確定你爲什麼認爲NIO是相關的;你需要弄清楚*你試圖做什麼之前,你試圖猜測你應該使用什麼工具 –

+0

爲什麼要這樣做?你希望獲得什麼樣的好處?你如何在每個連接一次獲得多個請求?問題沒有意義。 – EJP

回答

1

您可以使用Selector來實現您的目標。 Here是一個很好的例子,你可以參考。

0

您可以使用普通IO或阻塞NIO(或非阻塞NIO或異步NIO2)每個連接(或共享工作線程池)可以有任何多個線程,但除非這些線程正在等待像數據庫,這可能會更快(如果您想要低延遲,速度會更慢)

+0

謝謝你的回答。你能否解釋一下普通的IO如何被用來創建一個每線程請求體系結構? – seeker