2012-07-24 146 views
1

協議:TCP服務器/客戶端停止1個螺紋= 1個客戶

我有與接受客戶端,並把所述插座(由ss.accept()返回)在陣列的一個SocketServer的服務器。

我有一個線程需要通知,當一個套接字準備被讀取(客戶端發送數據)。 這個線程會將請求分派給其他線程進行處理,所以這個初始線程真正簡單而快速。

可能嗎?

我真的想避免1個線程= 1個客戶端,並有1個線程處理N個客戶端。

+0

1個線程多個客戶端導致鎖/死鎖/客戶端等待很多。你確定? – 2012-07-24 10:07:02

+0

這僅用於教育目的,但如果我有10k客戶,我可以做些什麼? 1線程= 1客戶端將不會...好? – kinaesthesia 2012-07-24 10:11:17

+2

大多數服務器端解決方案使用連接/線程池來解決該問題。 – 2012-07-24 10:13:59

回答

3

我想你可能想看看其中的一些文章對"Architecture of a Highly Scalable NIO-Based Server"
中討論的Java NIO非阻塞IO方面。另外我認爲答案this question會幫助你。

通常,非阻塞IO使用回調 - 當數據可用時,您的代碼將被要求註冊處理程序以「回調」。在這種情況下,處理程序會將消息或數據發佈到單個線程 - 這必須是線程安全的以處理併發通知/回調。