在本章,我們會讓你對什麼是MINA,什麼是非阻塞IO,為什麼我們在非阻塞IO上開發了這套框架有一個了解.我們也會給你展示一個非常簡單的例子去讓MINA跑起來.
1.非阻塞IO
非阻塞IO的API在JAVA 1.4版本出現,並且已經被用於數以萬計的應用當中.NIO API覆蓋了非阻塞的各種操作.在java.nio .*的包中包含了下面一些重要的結構:
Buffers - Data Containers Chartsets - Containers translators for bytes and Unicode Channels - represents connections to entities capable of I/O operations Selectors - provide selectable, multiplexed non-blocking IO Regexps - 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,並讓他生效。如果你用整合環境,build your classpath就可以了。
以上就是Apache Mina 學習筆記(1) - 入門的內容,更多相關內容請關注PHP中文網(www.php.cn)!