在本章,我们会让你对什么是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中文网(m.sbmmt.com)!