在本章,我们会让你对什么是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) - 入门的内容。