2013-01-08 249 views
0

如果我們正在創建一個在線聊天服務器,我認爲我們應該只需要一個ServerSocketChannel,不是嗎?爲什麼我們需要Java NIO Selector?

如果我們只有一個的ServerSocketChannel,爲什麼我們需要一個選擇?

任何人都可以給我一個真正的項目示例需要使用選擇器嗎?

謝謝!

回答

3

當你accept()ServerSocketChannel,你得到的回覆是一個新的SocketChannel你再read()write()傳達給客戶端。

您的選擇代碼將通常select(),然後通過所選擇的鍵迭代,接受任何密鑰isAcceptable()(從而打開一個新的信道),但隨後又讀出和寫入的任意鍵(您的接受客戶端信道的可能一個)isReadable()isWritable()

0

您需要一個選擇器來支持非阻塞NIO。如果你使用阻塞NIO(這是默認的),你不需要選擇器。

0

如果我們只有一個的ServerSocketChannel,爲什麼我們需要一個選擇

因爲你將有很多接受SocketChannels,和一個Selector可以讓你在同一個線程處理它們。