`

Mina 之 Mina的异步机制

    博客分类:
  • Java
 
阅读更多

将mina异步机制之前,先了解下同步和异步的区别:

(1)同步:发送一个请求,等待返回,再下一步发送请求;简单的说,A告诉B去做某件事情,然后就一直等待,直到B做完后返回给A,A才继续做其它的事情;

(2)异步:发送一个请求,不用等待返回,可随时发送请求;简单的说:A告诉B做某件事情,然后就去干其它的事情了,B做完后再通知A。

 

Mina是一个非常流行的网络程序的框架,它提供的是异步的API(It provides an abstract • event-driven • asynchronous API)。

比如,如果client想要创建一个到server的连接,用mina可以这样写:

 

NioSocketConnector connector = new NioSocketConnector();  
// 初始化connector...  
//..........  
connector.connect(address);  

 看上去好像和一般的写法没什么两样。但是,这里的connector.connect()方法是一个异步的调用,意思是程序告诉mina要去连接 address,mina返回说它会做这件事,但它可能还没有做完。所以,即便“connector.connect(address);”这行代码结束 了,也并不意味着连接成功了(mina这时候可能还正在创建连接的过程中)。完整的写法应该是:

ConnectFuture connFuture = connector.connect(address);
connFuture.addListener(new ConnectListener(){ //回调方法
		private class ConnectListener implements IoFutureListener<ConnectFuture>{
			
			public void operationComplete(ConnectFuture future) {
				
				if (future.isConnected()) {
					//get session
					IoSession session = future.getSession();
					
					session.write(...);
					
				} else {
					
					logger.error("can not create the connection .");
				}
			}
		}
	}
}

 

 这里面最重要的一个类是ConnectListener,它实现了IoFutureListener<ConnectFuture>这个接 口。这个类其实只有一个函数 – operationComplete,这是一个回调函数,它告诉mina一旦connect完成以后,就调用这个函数。我们这里的回调函数,首先判断一下 连接是否成功,如果成功,那么就向这个链接中写入数据(session.write)。

 

 

回调函数在异步机制中扮演着非常重要的角色。 因为在同步机制中,调用者会等到结果返回然后自己执行接下来的操作,比如,上面这段代码如果写成同步的,大概是这个样子:

 

boolean status = connector.connect(address);
if(status) {
	session.write(...);
} else {
	logger.error("can not create the connection .");
}

 但是在异步机制中,就只能将connect后面的代码做成回调函数,注册到mina中。这样,当mina完成工作后它才知道接下去该干什么。

值得一提的是,虽然Mina号称是Asynchronous API,但它也提供了同步的方法。比如,上面这段代码,如果用Mina的同步机制是这样写的:

ConnectFuture future = connector.connect(address);
future.awaitUninterruptibly(); //阻塞主线程
IoSession session = future.getSession();
// Send the first ping message
session.write(....);

 重点在于“future.awaitUninterruptibly();”这行代码,它会将程序阻塞住,直到连接创建好,所以,当这行代码结束后,就可以直接获取session并执行write操作。

 

 

分享到:
评论

相关推荐

    mina 同步客户端,异步客户端

    本代码包含mina服务端,同步客户端-即短连接方式,异步客户端-即长连接方式。

    MINA NIO 高性能异步并发网络通讯框架

    Mina 可以高效地完成以下任务: &lt;br&gt;TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 &lt;br&gt;据官方评测, APR 的效率较...

    mina异步通信

    异步通信文档\Mina2.0学习笔记完整版

    mina开发手册

    Apache Mina Server 2.0 中文参考手册 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP ...步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

    C++异步网络IO库,仿java的mina实现

    前段时间整理一下代码,仿照java的mina自己做了一套C++的异步socket IO 框架。 编译环境: fedora 10 / cenos 5.4 / cygwin gcc version 4.3.2 其他linux环境没试过,不过应该也没啥问题。 使用到的库: 如果光...

    Mina框架入门介绍

    pache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以...Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型

    mina开发示例

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。...它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发

    apache mina socket实例

    mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信...Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

    Mina框架简介

    Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。主要接收2.x版本

    MINA通讯框架的两个简单实例和文档

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...

    一种基于Mina状态机的高性能服务器的设计方法

    Mina采取异步I/O和事件驱动机制,有很高的效率和性能。Mina是用于开发高性能和高可用性的网络应用程序的基础框架

    JAVA 通信框架MINA(包含心跳)

    Apache MINA 是一个开发高性能和高可伸缩性网络应用...它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 可以作为开发网络应用程序的一个良好基础。

    Apache Mina Server 2.0 参考手册

    它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的...

    Mina所需要的第三方jar

    学习Mina所需要的第三方jar。Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP...Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

    mina技术知识

    mina技术异步技术 不用管理多线程的问题了的

    Mina-1.1.7.jar

    java服务器开源框架mina,主要用来C/S的开发。尤其是服务器的异步并发,此为先前版本

    mina中文开发手册.pdf

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP ...步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。 Mina 主要有1.x 和2.x 两个分支…………

    mina2.0初学教程

    它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发。 Apache Mina也称为:  NIO框架  客户端/服务端框架(典型的C/S架构)  网络套接字(networking...

    springboot mina 串口对接

    springboot集成mina实现串口协议对接,包含断包、粘包处理。串口协议发送与接收是异步的,发送没有返回,只能通过监听获取。

    Apache Mina网络通信应用框架实例

    Apache Mina Server 是一个网络通信...Mina 提供了事件驱动、异步操作(JAVA NIO 作为底层支持)的编程模型 本实例演示了编码、解码、支持json数据发送和接收,数据格式:{命令长度4字节,命令,数据长度4字节,数据}

Global site tag (gtag.js) - Google Analytics