Java NIO框架Netty教程(六)-Java NIO Selector模式
看到標題,您可能覺得,這跟Netty有什麼關係呢?確實,如果你完全是使用Netty的,那麼可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底層關於NIO的實現也是基於Java的Selector的,是對Selector的封裝。所以,我個人認為理解好Selector對於使用和理解Netty都是很多有幫助的。當然,如果您確實不關心這些,只想會用Netty就可以了。那麼下文,您可以略過:)
筆者對於Selector也是新上手學習的。之前很多新人跟我交流,都會提到一個新框架或者一個新開源工具的使用和上手的問題。他們會覺得上手困難,耗費事件。不過筆者,從來沒有此種感覺。這裡正好,借用Selector的學習過程,跟大家交流一下,我上手的過程。 想要使用一個工具,自然是先了解其定位,解決問題的原理或者工作流程。所以,筆者先從網上了解了一下Selector大概的工作流程。NIO 有一個主要的類Selector,這個類似一個觀察者,只要我們把需要探知的socketchannel告訴Selector,我們接著做別的事情,當有事件發生時,他會通知我們,傳回一組SelectionKey,我們讀取這些Key,就會獲得我們剛剛註冊過的socketchannel,然後,我們從這個Channel中讀取資料,放心,包準能夠讀到,接著我們可以處理這些資料。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/**
*
Java NIO Select模式服務端樣例程式碼
*
*
@author lihzh
*
@alia OneCoder
*
@date 2012-7-16 下午9:22:53
*/
public
class
NioSelectorServer {
/**
*
@author lihzh
*
@throws IOException
*
@alia OneCoder
*
@date 2012-7-16 下午9:22:53
*/
public
static
void
main(String[] args) throws
IOException {
//
建立一個selector選擇器
Selector
selector = Selector.open();
//
開啟一個通道
ServerSocketChannel
socketChannel = ServerSocketChannel.open();
//
繫結到9000埠
socketChannel.socket().bind( new
InetSocketAddress(
|