原文地址:Mina user guide getting started

1.1.1. NIO回顾

1.1.1.1. NIO回顾

NIO API是java 1.4引入的,已经被大多数应用系统所采用。NIO API包含了非阻塞non-blocking应用操作。

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

  • l Buffers - 数据容器
  • l Chartsets -  bytes 和Unicode的翻译容器
  • l Channels - 代表连接与实体的IO操作能力
  • l Selectors - 提供可选择的多个的非阻塞(non-blocking )IO选择器
  • l Regexps - 提供常规的正则表达式工具

在Mina框架中我们最感兴趣的是channels_,_selectors_ 和Buffers,尽管我们想把这些元素对用户隐藏起来。本用户指南将因此致力于构建一切之上的内部组件。

1.1.1.2. NIO对比BIO

理解NIO与BIO之间的区别是很重要的。BIO就是发起一个简单的Socket连接的阻塞模式:当读取或写入数据时,无论在socket调用期间执行了什么操作,被调用的方法处理会被阻塞,直到调用处理完成为止。

在某些情况下,能够调用处理操作很重要,否则就必须等待操作完成。如果调用完成才能进行某些处理,否则就会持续等待,这就意味着时间。

这里就是NIO需要提供更好的处理方式来解决大量的Socket连接:你不必为每一个连接创建一个线程,而只需要创建很少量的线程来做相同的事情。

如果你想更多了解哪些包含了NIO的信息,网上有很多文章和少量书籍可以解决这个问题。

1.1.2. 为什么是Mina

1.1.2.1. 为什么是Mina

编写一些网络应用,通常被视为是一种负担和低水平的发展。它不是一个被开发人员频繁学习和了解的领域,也因为在学校学习的时间太久而被忘记,或者是因为网络层的复杂和隐藏性而被更高级别的层级所掩盖,所以你从来都没有深入去研究它。

随着异步IO的引入,其他层级的复杂性也显现出来了,如:时间。

BIO与NIO之间大的区别是在BIO上。你发送一个请求,然后等待直到获取到响应为止。在服务端,它意味着线程会关联上任何连入进来的连接,所以你不会去处理复杂的多路连接。对于NIO而言,另一方面,你不得不处理异步特性的非阻塞系统,这就意味着当事件触发时你的应用程序就会被调用。在NIO中,你不会调用和等待一个返回结果,而是通过命令来通知结果是否完成。

1.1.2.2. 需要一个框架

思虑这些区别,事实上大多数的应用都期待在网络层是阻塞模式,最好的方案就是写一个框架来模拟(mimic)阻塞模式,这就是Mina。

但是Mina做得更多,它提供了基本的IO通信版本如,TCP、UDP、或无论什么底层原理。如果我们只考虑TCP和UDP,TCP是一个连接协议,当另一个是非连接的(UDP)。Mina做了不同的实现,并且能够使你只需要关注两个方面:及请求编码和应用协议编、解码。

Mina 不仅处理TCP和UDP,它也为串口通信提供上层,如RSC232,VmpPipe,APR。

最后,至少Mina是一个客户端和服务端的网络通信框架。编写一个服务器关键是使它成为一个可伸缩的系统,适应服务端的需求,在性能和内存使用方面,这就是Mina的好处,很容易扩展服务器端。

1.1.2.3. 什么时候使用Mina

这是一个有趣的问题。Mina在任何情况下都不预期成为最合适的选择。这里有几个使用Mina的要素考虑,下面列举他们:

  • 易用性当你没有特殊的性能要求,Mina可能是一个不错的选择,因为它允许你轻易扩展服务器或客户端,而不需要处理各种参数和用例编写相同的应用程序时处理的BIO或NIO。你可以写几十行代码定义你的服务器,并且可能实现一些陷阱的下降。
  • 大量的连接用户采用BIO连接,NIO明显更快。不同之处在于30%的BIO。这是真的长达几千连接的用户,但在一定程度上,BIO方法只是停止扩展:你不能够处理数以百万计的连接用户使用一个线程每用户!但是NIO可以。现在,另一个方面是,Mina的时间代码可能是不重要的一部分,而不管你的应用程序将消费。在某种程度上,它可能不是多次可贵的花更多的精力写自己更快的网络层的获得,几乎不会引起注意。
  • 有数据表明Mina被世界各地的数以千万计的应用程序使用。有一些基于Apache Mina项目,并且他们工作得很好。这是某种形式的保证您什么不需要花几个小时在一些神秘的错误在您自己的网络层的实现。
  • 存在支持协议Mina,附带各种现有的协议实现的如:HTTP、XML、TCP、LDAP、DHCP,NPT,DNS,XMPP,SSH、FTP……在某种程度上,不仅可以看到Mina NIO框架,而是作为一个网络层协议实现。Mina的特性之一,在不久的将来是为你提供一组可以使用的现有协议。

1.1.3. 特性

Mina是一个全功能的网络应用框架:

  • · 统一的API 用于各种各样的传输类型:
  • o TCP/IP & UDP/IP 的 Java NIO
  • o Serial communication串口通信 (RS232) via RXTX
  • o In-VM pipe communication
  • o You can implement your own!
  • · Filter过滤器接口用于用户扩展过滤; 类似于Servlet 过滤器
  • · 低级和高级API:
  • o 低级特性: 使用ByteBuffers
  • o 高级特性: 使用统一的消息对象和编码器
  • · 高级传统线程模块:
  • o Single thread单线程
  • o One thread pool线程池
  • o More than one thread pools (i.e. SEDA)多线程池
  • · 开箱即用的SSL 路 TLS 路 StartTLS support using Java 5 SSLEngine
  • · 过载保护与流量调节
  • · 单元测试使用模拟对象
  • · 基于流的 I/O支持流的IoHandler
  • · 与知名容器的集成such as PicoContainer and Spring
  • · 从Netty平滑迁移, Netty的始祖就是Apache MINA.

1.1.4. 第一步

我们将展示你是怎样容易使用Mina,运行一个非常简单的例子并提供了Mina包。当您想要在您的应用程序使用Mina,你必须做的第一件事情是设置你的环境。我们将描述您需要安装什么以及如何运行Mina的程序。没有花哨的,只是第一次Mina的感觉…

1.1.4.1. 下载

首先,你必须从下载部分下载最新的Mina发布版本,here。获取最新的版本,除非你有很好的理由不这样做……
    一般来说,如果你要使用Maven构建您的项目,你甚至不需要下载任何东西,只要你添加依赖仓库包含Mina库:你只要告诉Maven pom要使用所需要的Mina jar。

1.1.4.2. 包含文件

下载完成后,提取压缩文件的内容。 tar.gz或zip文件到本地硬盘。下载的压缩文件有以下内容:

在Unix系统输入,如:

<span style="font-size:12px;">$ tar xzpf apache-mina-2.0.7-tar.gz</span>

在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

1.1.4.3. 内容详情

  • · dist - 包含MINA jars及其代码
  • · docs - 包含API文档和代码外部参照
  • · lib - 包含所有使用Mina需要的 jar包

1.1.4.4. 运行第一个Mina程序

使用下载下来的release包,并运行它的示例程序。

你需要把如下Jar包加入到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

日志提醒:

  • · 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 是最基本的日志框架.

在命令提示符下,发出以下命令:

<span style="font-size:12px;">$ java org.apache.mina.example.gettingstarted.timeserver.MinaTimeServer</span>

这将启动服务器。现在telnet和看到执行的程序,发出以下命令telnet:

telnet 127.0.0.1 9123

这里的测试可以参考我的另一篇文章:

Mina快速编码测试验证示例

好的,我们已经运行我们的第一个Mina程序。请尝试其他示例程序附带米娜作为例子.

1.1.5. 总结

在这一章,我们看了Mina建立应用程序架构,客户端以及服务器。我们还实现了样例的TCP server/client,UDP server和client。在接下来的章节我们将讨论Mina核心结构和高级主题。

Mina NIO与BIO了解及Telnet简单测试-Getting Started相关推荐

  1. java mysql aio_Java中的NIO,BIO,AIO分别是什么

    Java中的NIO,BIO,AIO分别是什么 BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开 ...

  2. NIO和BIO和AIO区别

    这里写目录标题 tcp/ip协议: 三次握手和四次分手名词解释: http与tcp/ip协议的区别: NIO和BIO和AIO区别: NIO的三大核心组件关系 Channel Buffer buffer ...

  3. java中的NIO,BIO,AIO

    IO,input和output,Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. IO是什么?为什么需要IO? java在1.4之前,提供的是BIO,也就是ja ...

  4. Java中nio、bio和aio的区别

    前言:IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO.现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat.Jetty,还有基于 ...

  5. 基于bio手写实现简单的rpc

    基于bio手写实现简单的rpc 1.bio基础知识 Java BIO:传统的网络通讯模型,就是BIO,同步阻塞IO, 其实就是服务端创建一个ServerSocket, 然后就是客户端用一个Socket ...

  6. NIO和BIO如何影响应用程序的设计

    无论您选择 BIO或 NIO工具箱,可能会影响您应用程序设计的以下几个方面: A.对 NIO或 BIO类的 API调用. B.数据处理逻辑. C.用来处理数据的线程数.

  7. nio和bio的原理_Java的BIO,NIO和AIO的区别于演进

    前言 Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊. BIO BIO全称是Bl ...

  8. 《网络安全工程师笔记》 第十四章:渗透简单测试流程

    注:本笔记来自温晓飞老师的网络安全课程 第十四章:渗透简单测试流程 第一章:虚拟化架构与系统部署 第二章:IP地址详解 第三章:进制转换 第四章:DOS基本命令与批处理 第五章:用户与组管理 第六章: ...

  9. INNODB在裸设备上的性能简单测试

    INNODB在裸设备上的性能简单测试     裸设备简单测试 2009年4月28日 我这里用的SUN VBOX以及SUPER-SMACK来得到的数据. 至于SUPER-SMACK的介绍参见我以前的文章 ...

最新文章

  1. 算法--------俄罗斯套娃信封问题(Java版本)
  2. 设计模式学习(二): 观察者模式 (C#)
  3. OpenStack的部署T版(六)——Neutron组件
  4. CSS鼠标滑过改变样式颜色
  5. TIDB报错statement count 5001 exceeds the transaction limitation, autocommit = false问题解决
  6. java猜拳论文_Java人机猜拳实现的思路及方法实例
  7. 没有主清单属性_梦幻西游电脑版:神威组第一大唐?大佬两天更新200W硬件,这身属性难被超越!太狠了...
  8. 如何用git将本地项目push到GitHub上?
  9. 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
  10. [转帖]/proc/sys/net/ipv4/ 下参数理解
  11. *第六周*数据结构实践项目二【建设链栈算法库】
  12. Java jsp 自定义标签
  13. 怎么更换照片背景颜色
  14. css 面包屑 30个字节,css3面包屑设计
  15. 索引服务器(全文索引)的使用
  16. 蓝牙耳机与电脑连接篇
  17. 关于默认网关不可用,DNS服务器未响应问题
  18. Blender学习记录
  19. 测试 软通动力软件测试机试_软通动力软件测试笔试题
  20. 爬虫(八十八)lxml库的用法

热门文章

  1. python的取余算法原理_python.取余算法
  2. TreeMap原理实现及常用方法
  3. servlet过滤器有什么作用,一般用在什么地方??_乐字节java
  4. 白盒测试-六种基本方法
  5. 推荐好用的CRM客户管理软件?
  6. 【Writing】记录二:名词的所有格形式
  7. maven项目——使用jedis操作redis
  8. luogu P1803线段覆盖
  9. 使用QImage处理图片为黑白
  10. 利用 STC32G12K128 的 LCM 驱动 8080 接口的液晶屏