如果我們正在創建一個在線聊天服務器,我認爲我們應該只需要一個ServerSocketChannel,不是嗎?爲什麼我們需要Java NIO Selector?
如果我們只有一個的ServerSocketChannel,爲什麼我們需要一個選擇?
任何人都可以給我一個真正的項目示例需要使用選擇器嗎?
謝謝!
如果我們正在創建一個在線聊天服務器,我認爲我們應該只需要一個ServerSocketChannel,不是嗎?爲什麼我們需要Java NIO Selector?
如果我們只有一個的ServerSocketChannel,爲什麼我們需要一個選擇?
任何人都可以給我一個真正的項目示例需要使用選擇器嗎?
謝謝!
當你accept()
在ServerSocketChannel
,你得到的回覆是一個新的SocketChannel
你再read()
和write()
傳達給客戶端。
您的選擇代碼將通常select()
,然後通過所選擇的鍵迭代,接受任何密鑰isAcceptable()
(從而打開一個新的信道),但隨後又讀出和寫入的任意鍵(您的接受客戶端信道的可能一個)isReadable()
或isWritable()
。
您需要一個選擇器來支持非阻塞NIO。如果你使用阻塞NIO(這是默認的),你不需要選擇器。
如果我們只有一個的ServerSocketChannel,爲什麼我們需要一個選擇
因爲你將有很多接受SocketChannels,
和一個Selector
可以讓你在同一個線程處理它們。