原文地址:Mina user guide getting started
NIO API是java 1.4引入的,已经被大多数应用系统所采用。NIO API包含了非阻塞non-blocking应用操作。
java.nio.*包中包含了以下关键的结构:
在Mina框架中我们最感兴趣的是channels_,_selectors_ 和Buffers,尽管我们想把这些元素对用户隐藏起来。本用户指南将因此致力于构建一切之上的内部组件。
理解NIO与BIO之间的区别是很重要的。BIO就是发起一个简单的Socket连接的阻塞模式:当读取或写入数据时,无论在socket调用期间执行了什么操作,被调用的方法处理会被阻塞,直到调用处理完成为止。
在某些情况下,能够调用处理操作很重要,否则就必须等待操作完成。如果调用完成才能进行某些处理,否则就会持续等待,这就意味着时间。
这里就是NIO需要提供更好的处理方式来解决大量的Socket连接:你不必为每一个连接创建一个线程,而只需要创建很少量的线程来做相同的事情。
如果你想更多了解哪些包含了NIO的信息,网上有很多文章和少量书籍可以解决这个问题。
编写一些网络应用,通常被视为是一种负担和低水平的发展。它不是一个被开发人员频繁学习和了解的领域,也因为在学校学习的时间太久而被忘记,或者是因为网络层的复杂和隐藏性而被更高级别的层级所掩盖,所以你从来都没有深入去研究它。
随着异步IO的引入,其他层级的复杂性也显现出来了,如:时间。
BIO与NIO之间大的区别是在BIO上。你发送一个请求,然后等待直到获取到响应为止。在服务端,它意味着线程会关联上任何连入进来的连接,所以你不会去处理复杂的多路连接。对于NIO而言,另一方面,你不得不处理异步特性的非阻塞系统,这就意味着当事件触发时你的应用程序就会被调用。在NIO中,你不会调用和等待一个返回结果,而是通过命令来通知结果是否完成。
思虑这些区别,事实上大多数的应用都期待在网络层是阻塞模式,最好的方案就是写一个框架来模拟(mimic)阻塞模式,这就是Mina。
但是Mina做得更多,它提供了基本的IO通信版本如,TCP、UDP、或无论什么底层原理。如果我们只考虑TCP和UDP,TCP是一个连接协议,当另一个是非连接的(UDP)。Mina做了不同的实现,并且能够使你只需要关注两个方面:及请求编码和应用协议编、解码。
Mina 不仅处理TCP和UDP,它也为串口通信提供上层,如RSC232,VmpPipe,APR。
最后,至少Mina是一个客户端和服务端的网络通信框架。编写一个服务器关键是使它成为一个可伸缩的系统,适应服务端的需求,在性能和内存使用方面,这就是Mina的好处,很容易扩展服务器端。
这是一个有趣的问题。Mina在任何情况下都不预期成为最合适的选择。这里有几个使用Mina的要素考虑,下面列举他们:
Mina是一个全功能的网络应用框架:
我们将展示你是怎样容易使用Mina,运行一个非常简单的例子并提供了Mina包。当您想要在您的应用程序使用Mina,你必须做的第一件事情是设置你的环境。我们将描述您需要安装什么以及如何运行Mina的程序。没有花哨的,只是第一次Mina的感觉…
首先,你必须从下载部分下载最新的Mina发布版本,here。获取最新的版本,除非你有很好的理由不这样做……
一般来说,如果你要使用Maven构建您的项目,你甚至不需要下载任何东西,只要你添加依赖仓库包含Mina库:你只要告诉Maven pom要使用所需要的Mina jar。
下载完成后,提取压缩文件的内容。 tar.gz或zip文件到本地硬盘。下载的压缩文件有以下内容:
在Unix系统输入,如:
$ tar xzpf apache-mina-2.0.7-tar.gz
在apache-mina-2.0.7目录,你会获得如下所示目录结构:
+- dist
+- docs
+- lib
+- src
+- LICENSE.txt
+- LICENSE.jzlib.txt
+- LICENSE.ognl.txt
+- LICENSE.slf4j.txt
+- LICENSE.springframework.txt
+- NOTICE.txt
使用下载下来的release包,并运行它的示例程序。
你需要把如下Jar包加入到classpath:
日志提醒:
重要: 请确认使用正确的 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和看到执行的程序,发出以下命令telnet:
telnet 127.0.0.1 9123
这里的测试可以参考我的另一篇文章:
好的,我们已经运行我们的第一个Mina程序。请尝试其他示例程序附带米娜作为例子.
在这一章,我们看了Mina建立应用程序架构,客户端以及服务器。我们还实现了样例的TCP server/client,UDP server和client。在接下来的章节我们将讨论Mina核心结构和高级主题。