Mina Basics 01- 入门

入门

NIO概述

NIO API是在Java 1.4中引入的,后来被用于大量应用程序。 NIO API涵盖IO非阻塞操作。

首先,很高兴知道MINA是在NIO 1之上编写的。在Java 7,NIO-2中设计了一个新版本,我们还没有从这个版本带来的附加功能中受益。

同样重要的是要知道NIO中的N表示New,但我们将在许多地方使用Non-Blocking术语。 NIO-2应被视为新的I / O ......

 

java.nio.*包中包含以下关键结构

Buffers  -  数据容器

Chartsets - 用于字节和Unicode的容器转换器

Channels -  表示与能够进行I / O操作的实体的连接

Selectors - 提供可选择的多路复用非阻塞IO

Regexps - 提供一些工具来操作正则表达式

 

我们最感兴趣的是MINA框架中的Channels,_ Selectors_和Buffers部分,除了我们想要将这些元素隐藏到用户。

因此,本用户指南将重点关注构建在这些内部组件之上的所有内容。

 

NIO vs BIO

了解这两个API之间的区别非常重要。 BIO或Blocking IO依赖于阻塞模式中使用的普通套接字:当您在套接字上读取,写入或执行任何操作时,被调用的操作将阻塞调用者通知直到操作完成。

在某些情况下,能够调用操作并期望被调用的操作在操作完成时通知调用者是至关重要的:调用者可以在同一时间执行其他操作。

当你有许多连接的套接字时,这也是NIO提供更好的处理IO的方法:你不必为每个连接创建一个特定的线程,你可以只使用几个线程来完成同样的工作。

如果你想获得有关NIO的更多信息,网上有很多好文章,还有一些书可以解决这个问题。

 

为何选择MINA?

编写网络应用程序通常被视为负担并被视为低级别开发。这是一个开发人员不经常研究或了解的领域,要么是因为它已经在学校很久以前就被研究过了,而且一切都被遗忘了,或者因为网络层的复杂性经常被更高层次的层隐藏,所以你从来没有深入到它。

除此之外(当谈到异步IO时)还会产生额外的复杂性:时间。

BIO(阻塞IO)和NIO(非阻塞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可能是一个不错的选择,因为它允许您轻松地开发服务器或客户端,而无需处理在顶部编写相同应用程序时处理的各种参数和用例BIO或NIO。你可能只用几行代码编写你的服务器,并且你可能会陷入更少的陷阱。

大量连接用户BIO明显比NIO快。 差异是30%赞成BIO。 对于成千上万的连接用户来说,情况确实如此,但连接数到了某一个点,BIO方法只是停止扩展; 您将无法使用每个用户一个线程处理数百万连接用户! NIO可以。 现在,另一个方面是,与您的应用程序将消耗的任何内容相比,在代码的MINA部分中花费的时间可能并不重要。 在某些时候,花费精力尝试自己编写一个更快的网络层以获得几乎无法察觉的增益可能是不值得的。

    经过验证的系统MINA被世界各地的许多应用程序使用。有一些基于MINA的Apache项目,它们运行良好。这可以简化你的思路而不必在自己的网络层实现中花费数小时来处理一些神秘错误。

现有支持的协议MINA附带了各种实现的协议:HTTP,XML,TCP,LDAP,DHCP,NTP,DNS,XMPP,SSH,FTP ......在某些时候,MINA不仅可以看作是NIO框架,而且可以看作是网络层与一些协议实现。在不久的将来,MINA可能会提供更广泛的协议供您使用。

特性

MINA是一个简单但功能齐全的网络应用程序框架,它提供:

适用于各种传输类型的统一API:

    通过Java NIO实现TCP / IP和UDP / IP

    通过RXTX进行串行通信(RS232)

    虚拟机管道通信

    你可以实现自己的!

过滤接口作为扩展点;类似于Servlet过滤器

低级和高级API:

    低级:使用ByteBuffers

    高级:使用用户定义的消息对象和编解码器

高度可定制的线程模型:

    单线程

    一个线程池

    多个线程池(即SEDA)

开箱即用的SSL·TLS·使用Java 5 SSLEngine支持StartTLS

过载屏蔽和流量限制

使用模拟对象的单元可测试性

JMX管理

通过StreamIoHandler支持基于流的I / O.

与知名的容器集成,如PicoContainer和Spring

从Apache MINA的祖先Netty顺利迁移

第一步

我们将向您展示使用MINA是多么容易,运行MINA包提供的一个非常简单的示例。

您需要做的第一件事是在您的应用程序中使用MINA时设置环境。我们将描述您需要安装的内容以及如何运行MINA程序。没什么花哨,只是MINA的第一次尝试......

下载

首先,您必须从下载部分下载最新的MINA版本。只要拿最新版本,除非你有充分的理由不这样做......

一般来说,如果你打算使用Maven来构建你的项目,你甚至不需要下载任何东西,只要你依赖已经包含MINA库的存储库:你只需告诉你想要的Maven poms你想要的东西使用你需要的MINA jars。

里面有什么

下载完成后,将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

 

内容清单

dist - 包含MINA库代码的jar

docs - 包含API文档和代码外部参照

lib - 包含使用MINA所需的所有库所需的所有jar

除此之外,基本目录还有几个许可证和通知文件

运行你的第一个MINA程序

好吧,我们已经下载了这个版本,让我们运行我们发布的第一个MINA示例。

将以下jar放入类路径中:

  • 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

日志提示:

  • Log4J 1.2 users: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x
  • Log4J 1.3 users: slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
  • java.util.logging users: 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并看到该程序在行动 发出以下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

posted @ 2018-11-09 12:33  天蓝隐湘  阅读(168)  评论(0编辑  收藏  举报