在本章,我們會讓你對什麼是MINA,什麼是非阻塞IO,為什麼我們在非阻塞IO上開發了這套架構有一個瞭解.我們也會給你展示一個非常簡單的例子去讓MINA跑起來.
1.非阻塞IO
非阻塞IO的API在JAVA 1.4版本出現,並且已經被用於數以萬計的應用當中.NIO API覆蓋了非阻塞的各種操作.在java.nio.*的包中包含了下面一些重要的結構:
Buffers - Data ContainersChartsets - Containers translators for bytes and UnicodeChannels - represents connections to entities capable of I/O operationsSelectors - provide selectable, multiplexed non-blocking IORegexps - provide provide some tools to manipulate regular expressions
在MINA架構中,我們對於Channels,_Selectors_ 和 Buffers最為感興趣,我們希望對使用者隱藏這部分.
2.NIO vs BIO
理解這兩種API之間的區別是很重要的.BIO,即阻塞IO,依賴於socket採用阻塞模式,當你讀寫或者其他任何操作socket的時候,調用者會阻塞直至該操作完成.
但是在一些實際情況中,它期待於被調用者在完成請求時能夠通知調用者,而調用者在同時可以完成其他的操作.這就是NIO.當你有很多個已串連的socket,NIO是一種更好的解決方案,你不需要為每個串連建立特定的線程,你可以僅僅只採用一些線程去做同樣的工作.如果你想要獲得更多的關於NIO的資訊,網路上有很多這方面的資料和書籍.
3.Why MINA?
寫一些網路應用程式,通常被看作是一種負擔,是一種底層的開發。是一塊開發人員不經常接觸的領域,或者曾經在學校學習過,但是已經忘記了,或者網路層的複雜性被更高層的抽象隱藏了,而你並不瞭解底層的東西。
當提到非同步IO的時候,一個額外的複雜性出現了:時間.
在BIO和NIO兩者間最大的不同就是,在BIO中,當你發送一個請求,你必須等待知道請求被回應.在服務端,意味著每當有一個串連到來時,要有一個線程被建立.所以你不得不處理多路串連的複雜性.而在NIO中,你得在一個非阻塞系統中解決同步問題,它意味著,當一些事件發生時,你不得不被捲入其中.在NIO中,你不需要等待你之前的調用,你發送一個請求,當請求完成時會通知你的.
4.The need of a framework
考慮到這些差異,以及這些問題的複雜性,最好的解決方案就是將這些複雜性隱藏起來,這就是MINA所做的.但是MINA可以做的更多,當通過TCP,UDP或者其他機制通訊的時候,它提供了一些常見的IO。如果我們只考慮TCP和UDP,MINA可以區分這兩種協議,並且讓你的注意力可以集中在你的應用程式的其他部分。
MINA不僅僅可以解決TCP和UDP問題,他對於串列通訊,ARP也很有用。
最後,MINA是一種被定製的用來解決伺服器用戶端通訊問題的網路架構,書寫一個高度可擴充的,根據需求適應的伺服器,並且讓記憶體效能得以體現,這些都是MINA所擅長的,總是它希望讓你程式開發伺服器的時候,變得輕鬆。
5.First Steps
下面我們會展示使用MINA是多麼的簡單,並且運行一個非常簡單的例子。首先,到這裡去下載MINA的最新版,除非你有足夠的理由讓你不用最新版,否則希望你能用最新版開發。http://mina.apache.org/mina-project/downloads.html。下載完畢之後,解壓所下載的檔案。目錄下面會包含一些子目錄,其中disk包含MINA庫的jar檔案,docs包含了API文檔,lib包含了MINA所需要的jar檔案。
6.運行第一MINA程式
首先,如果你在終端,需要將一下包加入classpath,修改/etc/profile,並讓他生效。如果你用Integration Environment,build your classpath就可以了。
以上就是Apache Mina 學習筆記(1) - 入門的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!