1. 程式人生 > >Java NIO框架Netty教程(六)-Java NIO Selector模式

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中讀取資料,放心,包準能夠讀到,接著我們可以處理這些資料。
這是筆者摘錄的一小段總結,就這一小段基本已經可以說明問題了。接下來,我們要考慮的就是,要實現這個過程,我們需要做什麼?順著描述,我們可以想象,需要選擇器,需要訊息傳送的通道,需要註冊一個事件,用於識別。通道自然需要繫結到一個地址。有了這樣大概的想法,我們就可以去API裡找相關的介面。 Selector服務端樣例程式碼: ?
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(

相關推薦

Java NIO框架Netty教程()-Java NIO Selector模式

看到標題,您可能覺得,這跟Netty有什麼關係呢?確實,如果你完全是使用Netty的,那麼可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底層關於NIO的實現也是基於Java的Selector的,是對Selector的封裝。所以,我個人認為理解

Java NIO框架Netty教程()

看到標題,您可能覺得,這跟Netty有什麼關係呢?確實,如果你完全是使用Netty的,那麼可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底層關於NIO的實現也是基於Java的Selector的,是對Selector的封裝

Java NIO框架Netty教程(十)-ServerBootStrap啟動流程源碼分析

ucc ask pip 以及 梳理 學習曲線 owa pan server 有一段事件沒有更新文章了,各種原因都有吧。搬家的瑣事,搬家後的安逸呵呵。不過,OneCoder明白,絕不能放松。對於Netty的學習,也該稍微深入一點了。 所以,這次OneCoder花了幾天時間,仔

Java NIO框架Netty教程(十)

有一段事件沒有更新文章了,各種原因都有吧。搬家的瑣事,搬家後的安逸呵呵。不過,OneCoder明白,絕不能放鬆。對於Netty的學習,也該稍微深入一點了。 所以,這次OneCoder花了幾天時間,仔細梳理了一下Netty的原始碼,總結了一下Se

Java NIO框架Netty教程(九) Object對象編/解碼

log writer arr num context 不兼容 是的 pat .html 看到題目,有的同學可能會想,上回不是說過對象傳遞了嗎?是的,只是在Java NIO框架Netty教程(八) Object對象傳遞中,我們只是介紹如何使用Netty提供的編/解碼工具,完成

Java NIO框架Netty教程(四) ChannelBuffer

ets 認識 buffers 不想 http 觸發 getch 我們 基於 在學字符串消息收發(http://www.it165.net/pro/html/201207/3174.html)的時候,已經提到過。ChannelBuffer是Netty中非常重要的概念。所有消息

Java NIO框架Netty教程(三) 字符串消息收發

view itl col ioc 啟動 type lines nta tty 了解了Netty的基本概念(http://www.it165.net/pro/html/201207/3173.html),開發起來應該會順手很多。 在“Hello World(http://w

Java NIO框架Netty教程(一) – Hello Netty

tex highlight bsp ret 開發 包括 tor 習慣 事件機制 先啰嗦兩句,如果你還不知道Netty是做什麽的能做什麽。那可以先簡單的搜索了解一下。我只能說Netty是一個NIO的框架,可以用於開發分布式的Java程序。具體能做什麽,各位可以盡量發揮想象。技

Java NIO框架Netty教程(三)

瞭解了Netty的基本概念,開發起來應該會順手很多。在“Hello World”程式碼中,我們只是在完成繫結的時候,在各自的本地列印了簡單的資訊,並沒有客戶端和服務端的訊息傳遞。這個肯定是最基本的功能。在上程式碼之前,先補充一個Netty中重要的

Java NIO框架Netty教程(八)

說了這麼多廢話,才提到物件的傳輸,不知道您是不是已經不耐煩了。一個系統內部的訊息傳遞,沒有物件傳遞是不太現實的。下面就來說說,怎麼傳遞物件。 如果,您看過前面的介紹,如果您善於專注本質,勤于思考。您應該也會想到,我們說過,Netty的訊息傳遞都

Java NIO框架Netty教程(五)

週末是最好的學習時間,不過這週末收房子,可想而知事情自然也不會少。這段時間的週末,可能很少有時間學習了。見縫插針吧。 不說廢話了,好好學習。上回通過程式碼理解了Netty底層資訊的流的傳遞機制,不過只是一個感性上的認識。教會你應該如何使用和使用

Java NIO框架Netty教程(十四)

OneCoder這個週末搬家,並且新家目前還沒有網路,本週的翻譯的任務尚未完成,下週一起補上,先上一篇OIO和NIO對比的小研究。 Netty中不光支援了Java中NIO模型,同時也提供了對OIO模型的支援。(New IO vs Old IO)

Java NIO框架Netty教程(十)

如果您一直關注OneCoder,我們之前有兩篇文章介紹關於Netty訊息連續收發的問題。( 《Java NIO框架Netty教程(五)- 訊息收發次數不匹配的問題 》、《 Java NIO框架Netty教程(七)-再談收發資訊次數問題 》)。如果

Java NIO框架Netty教程(四)

Unfortunately, the buffer of a stream-based transport is not a queue of packets but a queue of bytes. It means, even if you sent two messages

Java NIO框架Netty教程(二)

“Hello World”的程式碼固然簡單,不過其中的幾個重要概念(類)和 Netty的工作原理還是需要簡單明確一下,至少知道其是負責什。方便自己以後更靈活的使用和擴充套件。 宣告,筆者一介碼農,不會那麼多專業的詞彙和縮寫,只能以最簡單蒼白的

Java NIO框架Netty教程(十二)

寫在前面:對Netty併發問題的測試和解決完全超出了我的預期,想說的東西越來越多。所以才出現這個中篇,也就是說,一定會有下篇。至於問題點的發現,OneCoder也在努力驗證中。 繼續併發的問題。在《Java NIO框架Netty教程(十一)-併

Java NIO框架Netty教程(一)

先囉嗦兩句,如果你還不知道Netty是做什麼的能做什麼。那可以先簡單的搜尋瞭解一下。我只能說Netty是一個NIO的框架,可以用於開發分散式的Java程式。具體能做什麼,各位可以儘量發揮想象。技術,是服務於人而不是侷限住人的。 Netty的簡介

Java NIO框架Netty教程(十一)

之前更新了幾篇關於JVM研究的文章,其實也是在做本篇文章驗證的時候,跑的有點遠,呵呵。迴歸Netty教程,這次要講的其實是針對一個問題的研究和驗證結論。另外,最近工作比較忙,所以可能會分文章更新一些階段性的成果,而不是全部彙總更新,以免間隔過久。

Java NIO框架Netty教程(十三)

在上節(《Java NIO框架Netty教程(十二)-併發訪問測試(中)》),我們從各個角度對Netty併發的場景進行了測試。這節,我們將重點關注上節最後提到的問題。在多執行緒併發訪問的情況下,會出現 警告: EXCEPTION, please

Java NIO框架Netty教程(十七)

最近很多人問我有沒有Netty4的Hello World樣例,很早之前知道Netty要出4,當時只知道4的包名完全邊了,因為Netty從JBoss中獨立出來了,並採用了新的netty.io的域名,但是沒想到程式碼也有這麼大的調整。 既然答應