《Apache MINA 2.0 用户指南》系列博客总序
《Apache MINA 2.0 用户指南》取材自 Apache 官方指南,共分十七章,此系列博客完本后,笔者会整理一份中英文对照阅读的 PDF 文档,届时将公布下载地址。敬请期待。
《Apache MINA 2.0 用户指南》第一章:入门
本章中,我们将给你关于什么是 MINA、什么是 NIO、我什么我们在 NIO 之上开发了一个框架以及你会在其中找到什么等等的第一认识。我们也将会给你演示如何在一台 MINA 的服务器上运行一个很简单的例子。
NIO 概述
NIO API 是由 Java 1.4 引入的,从此被广泛用于各种应用。 NIO API 封装了 IO 非阻塞操作。
首先,最好了解一下 MINA 是基于 NIO 1 写的。Java 7 设计了一个新版本 NIO-2,(因为我们基于 NIO 1) 我们并没有从这一版本 (NIO-2) 所带来的新加功能中获益。
也有必要了解到 NIO 中的 N 意思是 New,但是我们在很多地方将不会使用 Non-Blocking (非阻塞) 术语。NIO-2 应该被视为一个新新 (New New) I/O...
java.nio.* 包包含了以下关键构造
本用户指南因此将把重点放在基于这些内部组件构建的每个对象上。
NIO vs BIO
很有必要来了解一下这两个 API 之间的差别。 BIO,或者叫做 Blocking IO,依赖于用于阻塞模式的普通套接字:在你在套接字上进行读、写或者任何操作的时候,被调用的操作在操作结束之前将会一直阻塞住调用者。
在某些情况下,能够调用这些操作是很重要的,并且希望被调用的操作在其操作结束之后能够通知调用者:这样调用者在这段时间之内可以做一些其他的事情。
这也是在你具有众多连接的套接字时 NIO 所能提供的一个更好的方式的地方:你无须为每个连接创建一个特定的线程,你仅仅需要很少的几个来做同样事情的线程。
如果你想获得涵盖有 NIO 的更多信息,互联网上有很多相关的不错的文章,也有一些关于这方面内容的出版的书籍。
Why MINA?
写网络应用常常被视作一种高负担但低水平的开发。这是一个不经常为程序员所学习或者了解的领域,这可能是因为这些内容是在很久以前在学校里学过但都忘光了,也可能是因为这一网络层的复杂性常常被更高层的传输层所隐藏以致你从来没有深入它。
补充一点,当涉及到异步 IO 时,一个额外的复杂的层出场了:时间。
BIO (Blocking IO,阻塞 IO) 和 NIO (Non-Blocking IO,非阻塞 IO) 之间的最大的区别在于在 BIO 中,你发送了一个请求,然后你将在得到回复之前一直等待。在服务器端,这意味着一个线程可能会涉及到任何进入的连接,因此你不需要应对多路复用连接的复杂性。另一方面,在 NIO 中,你必须应对非阻塞系统的同步特性,这意味着在一些事件发生时你的应用会被调用。在 NIO 中,你无需调用了以后等待一个结果,你发送一条命令之后,结果就绪了你会被通知。
框架所需要的
考虑到这些不同,以及大多数应用程序在调用网络层的时候通常会期望一个阻塞模式,最好的解决方案就是通过写一个阻塞模式的模仿框架来隐藏掉这一表象。这就是 MINA 所做的事情!
但是 MINA 做的事情不仅于此。它为需要通过 TCP、 UDP 或者任何机制通信的应用提供了一个通用 IO 幻像。如果我们仅仅考虑 TCP 或者 UDP,一个是有连接的协议 ( TCP) 另一个是无连接的 ( UDP)。 MINA 将这种差异掩盖起来,以让你关注于对你的应用很重要的两部分:实用的代码和应用协议的编码/解码。
MINA 不仅仅处理 TCP 和 UDP,它也使用 VmpPipe 或者 APR 提供了一个串行通信 ( RSC232) 之上的一层。
最后,很重要的是, MINA 是一个专门设计既能工作在客户端又能工作在服务器端的网络框架。写一个服务器的关键在于具有一个可扩展性的系统,这样可以灵活地满足服务器需求,根据性能和内存使用:这就是 MINA 的优势,使你的服务器开发变得容易。
何时使用 MINA?
这是个有趣的话题! MINA 并不期望在任何情况下都是最好的选择。在考虑使用 MINA 之前要思考几个要素:
特性
MINA 是一个简单但功能齐全的网络应用框架,它提供:
为不同的传输类型统一 API:
基于 Java NIO 的 TCP/IP 和 UDP/IP
基于 RXTX 的 串行通信 (RS232)
In-VM 通道通信
你可以实现你自己的!
过滤器接口作为扩展点;类似于 Servlet 过滤器
低层和高层 API:
低层:使用 ByteBuffers
高层:使用用户定义的消息对象和编解码器
高可定制化的线程模型:
单个线程
一个线程池
多个线程池 (比如 SEDA)
使用 Java 5 SSLEngine 的开箱可用的 SSL · TLS · StartTLS 支持
超负载保护和流量调节
使用模拟对象单元测试
JMX 可管理性
使用 StreamIoHandler 的基于流的 I/O 支持
知名容器诸如 PicoContainer 和 Spring 的集成
从 Netty 的平滑迁移,Apache MINA 继承于 Netty
开始的步骤
我们将通过运行一个 MINA 包提供的很简单的例子给你演示使用 MINA 是多么简单。
想要在你的应用中使用 MINA 的第一件事是要设置环境。我们将描述你需要安装什么,以及如何运行一个 MINA 程序。没啥大不了的,先来体验一下 MINA 吧 ...
下载
首先,你需要从 下载区下载到最新 MINA 发布版。建议选择最新版,除非你有非常好的理由不这么做 ...
一般来说,如果你要使用 Maven 来构建你的项目,你甚至不需要下载任何东西,你只需依赖进一个包含了 MINA 库的 repository:也就是说你只需告诉 Maven pom 你需要使用 MINA 包。
里边是什么
下载完成后,将 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
内容详情
除此之外,基目录下还有两个许可和公告文件。
运行你的第一个 MINA 程序
下载完发布版之后,让我们运行一下发布版附带的第一个 MINA 例子吧。
将以下包放进 classpath
$ java org.apache.mina.example.gettingstarted.timeserver.MinaTimeServer
这将启动服务器。现在 telnet 将会看到程序已启动。
输入以下命令来 telnet:
telnet 127.0.0.1 9123
现在我们已经运行了第一个 MINA 程序。请试着运行 MINA 所附带的其他一些例子程序。
本章总结
在本章中,我们了解了基于 MINA 的客户端以及服务器端的应用体系。我们还涉及了 TCP 服务端/客户端、UDP 服务器端和客户端的例子实现。
在接下来的章节中我们将会讨论 MINA 的核心结构以及一些高级主题。
原文链接: http://mina.apache.org/mina-project/userguide/ch1-getting-started/ch1-getting-started.html。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://defonds.blog.csdn.net/article/details/17953849
内容来源于网络,如有侵权,请联系作者删除!