MINA学习笔记一

为啥是MINA?
BIO Blocking IO 阻塞IO
NIO Non-Blocking IO 非阻塞IO
BIO和NIO的区别在于,在BIO中,你发送一个请求,你需要一直等待,直到获取到响应。在服务端,这意味着任何到来的连接都将会关联到一个线程,所以你将不得不处理连接的多路复用的复杂性。另一方面,在NIO中,你不得不处理一个非阻塞系统的同步,这也就意味着当一些时间发生时你的应用将被调用。在NIO中,你不需要调用并等待一个结果,你发送一个命令,当结果准备好后,你会得到通知。
需要一个框架
考虑到这些不同,以及多数应用在调用网络层是通常都期待一个阻塞模式,但是最好的解决方法是编写一个模拟阻塞模式的框架隐藏这些方面的复杂性。而这正是MINA所做的。
但MINA做的并不止这些,它给应用提供一个通用IO版本,来实现TCP、UDP或其他任何方式的连接。
MINA不仅能处理TCP和UDP,它在串行通信(RSC232)上提供了一个层,在VmpPipe或APR之上。
MINA是一个特别设计的网络框架,可以工作在客户端和服务端。
何时使用MINA?
这是一个有趣的问题!MINA并不期望成为任何情况下的最优的选择。下面有一些因素在考虑是否使用MINA可以用到:
1.当没有特殊的性能要求时,MINA是一个比较好的选择,在编写基于BIO或NIO的相同应用时,你可以很容易开发出一个客户端或一个服务器,而不必去处理各种各样的参数和处理不同的用例。你可以通过编写几十行代码来实现你的服务,这里有一些常见的误区。
2.大量的用户连接的BIO要比NIO快,差异大概是30%。这在几千个用户连接的情况下是成立的,但到了一个点,BIO将基本上停止扩展,你将不能通过每个用户一个线程的方式来处理百万级的连接,但NIO可以。现在,另一个方面是在你的MINA部分代码上花费的时间可能并不明显,与你的应用将花费的时间相比。在某些时候,自己花费更多的时间和经历来编写一个更快的网络层并不值得,所带来的收益也并不明显。
3.MINA作为一个成熟的系统被全世界数以万计的应用使用。Apache的一些基于MINA的项目也运行的非常好。这是也是另一种形式的担保,让你免去在自己实现的网络层上花费大量的时间去解决那些诡异的错误。
4.MINA目前对现在支持的协议都有不同实现,包括:HTTP, XML, TCP, LDAP, DHCP, NTP, DNS, XMPP, SSH, FTP... ,在某种情况下,MINA并不仅仅是一个NIO的框架,而是一个实现了不同协议的网络层。未来MINA的功能之一就是提供你能用到的现有的协议集合。
功能
MINA作为一个易用的、功能全面的网络应用框架提供一下功能:
(1)为各种传送类型的协议提供统一的API:
1)通过JAVA NIO实现的TCP/IP及UDP/IP
2)通过RXTX实现的串行通信(RS232)
3)VM内部管道通信
4)你可以实现你自己的
(2)作为一个扩展点的,类似于Servlet 过滤器的过滤器接口
(3)底层和高层API:
1)底层API:使用ByteBuffers
2)高层API:使用用户定义的消息对象和编辑码器
(4)高度可定制的线程模型
1)单线程
2)一个线程池
3)多线程池(例如SEDA)
(5)开箱即用的SSL、TLS、StartTLS ,通过java 5的SSLEngine来支持
(6)过载保护和流量截留
(7)使用模拟对象提供单元可测试性
(8)JMX 的可管理性
(9)通过StreamIoHandle实现的基于流的I/O支持
(10)集成了流行的容器,像PicoContainer 和spring
(11)平滑从Apache MINA的前身Netty迁移,
第一步
(1)下载
首先,下载最新版本的MINA,下载地址:
http://mina.apache.org/mina-project/downloads.html
(2)里面有啥
将下载的zip或tar.gz解压到本地
文件夹:
1)dist 包含MINA库代码的jar
2)docs 包含API文档和外部参照代码
3)lib 包含所有使用MINA所需的jar包
(3)运行你的第一个MINA程序
我们已经下载好了MINA的release,现在我们来运行第一个release中自带的MINA的例子。
将以下jars添加到classpath
 mina-core-2.0.7.jar
 mina-example-2.0.7.jar
 slf4j-api-1.6.6.jar
 slf4j-log4j12-1.6.6.jar
 log4j-1.2.17.jar
日志提示:
Log4J1.2的使用者:slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x
Log4J1.3的使用者:slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
java.util.logging的使用者:slf4j-api.jar and slf4j-jdk14.jar
重要:请确定你正确使用了slf4j-*.jar来匹配你的日志框架,举例来说,slf4j-log4j12.jar 和 log4j-1.3.x.jar不可在一起使用,否则将会发生故障,如果你不需要日志框架,你可以使用slf4j-nop.jar不记录日志或使用slf4j-simple.jar来记录最基本的日志。
在命令行中输入以下命令:
$ java org.apache.mina.example.gettingstarted.timeserver.MinaTimeServer
这将启动服务,现在通过telnet命令来看看程序如何运行
telent 127.0.0.1 9123
总结
在这一章中,我们了解到了MINA的基本架构,通用于客户端和服务端。

你可能感兴趣的:(Mina)