Apache Mina的用法

Apache MINA是“Multipurpose Infrastructure for Network Applications”的简写,它是用于开发高性能和高可扩展性的网络应用程序的基础框架。该框架有如下优点:
        1、使用该框架来开发的网络应用程序代码结构清晰明了;
        2、该框架完成了底层的线程管理,省去了处理底层I/O和线程并发等复杂工作;
        3、该框架内置的编码器可以满足大多数用户的需求,省去了开发人员对消息进行编码解码的工作;
        4、该框架具有较高的执行效率,具称使用该框架开发服务器程序的性能已经逼近使用 C/C++语言开发的网络服务器程序。
        下面以一个详细的示例来演示一下Apache Mina的用法:
        工程结构如下图:

限于篇幅,这里只给出上图标出的两个文件中的代码,完整的源码可通过点击本文最下面的超链接下载:

StartMinaClient.java文件中的代码:

package com.ghj.packageofclient;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.CloseFuture;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

/**
 * 启动mina客户端
 *
 * @author 高焕杰
 */
public class StartMinaClient {

	public static void main(String[] args) {

		NioSocketConnector connector = new NioSocketConnector();//创建客户端连接器
		DefaultIoFilterChainBuilder filterChain = connector.getFilterChain();
		filterChain.addLast("logger", new LoggingFilter());//设置日志工厂过滤器
		filterChain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//设置文本编解码过滤器
		connector.setConnectTimeout(3000);//设置连接超时时间(单位毫秒)
		connector.setHandler(new ClientHandlerAdapter());//设置事件处理器
		connector.getSessionConfig().setReadBufferSize(1024);//设置读缓冲区大小
		connector.getSessionConfig().setWriteTimeout(1000); //设置写操作的超时时间
		connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);//第一个参数用于指定空闲状态,第二个参数用于指定Session的闲置时间(单位秒),此处含义为:读写 通道均在3 秒内无任何操作就进入空闲状态
		ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",	9123));//建立连接
		connectFuture.awaitUninterruptibly();//等待连接创建完成
		IoSession session = connectFuture.getSession();//保存会话属性和发送消息
		session.write("你好 Apache Mina服务器端!!!");//发送消息
		session.write("quit"); //发送消息
		CloseFuture future = session.getCloseFuture();
		future.awaitUninterruptibly();//等待连接断开
		future.awaitUninterruptibly(1000);//等待连接断开
		connector.dispose();
	}
}

StartMinaServer.java文件中的代码:

package com.ghj.packageofserver;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 * 启动mina服务端
 *
 * @author 高焕杰
 */
public class StartMinaServer {

	public static void main(String[] args) {

		IoAcceptor acceptor = new NioSocketAcceptor();//创建服务端监听
		acceptor.setHandler(new ServerHandlerAdapter());//为该acceptor设置用于业务处理的Hanlder实例
		acceptor.getSessionConfig().setReadBufferSize(1024);//设置读缓冲区大小
	    acceptor.getSessionConfig().setWriteTimeout(1000); //设置写操作的超时时间
		DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
		filterChain.addLast("logger", new LoggingFilter());//设置日志工厂过滤器
		filterChain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//设置文本编解码过滤器
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);//第一个参数用于指定空闲状态,第二个参数用于指定Session的闲置时间(单位秒),此处含义为:读写 通道均在3 秒内无任何操作就进入空闲状态
		try {
			acceptor.bind(new InetSocketAddress(9123));//绑定监听端口
			System.out.println("服务器启动成功");
		} catch (IOException e) {
			System.out.println("服务器启动失败");
			e.printStackTrace();
		}
	}
}

0分下载该示例代码

时间: 2024-10-12 17:12:27

Apache Mina的用法的相关文章

Apache MINA - Mina 特性说明

Mina 特性说明 MINA 是一个简单而特性强大的网络应用框架,它提供如下特性 : 提供针对多种传输类型的 API : TCP/IP & UDP/IP (通过 Java NIO) 串口通信 (RS232) (通过 RXTX) JVM 内部管道通信 你可以实现自己的网络协议 ! 使用过滤器接口(Filter)作为扩展点 ; 同 Servlet 过滤器很像 低层和高层 API : 低层 : 使用 ByteBuffers 高层 : 使用用户定义的消息对象和编码 高度自定义的线程模型: 单线程 一个线

Apache Mina

初步接触RPC通信框架,目前有很多优秀的RPC框架,今天我参考该博文:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html 学习了Aapche Mina通信框架.博主介绍的非常详细,包括Mina的源码流程,这里通过阅读博主的文章进行了学习记录,方便以后需要时使用. Apache Mina 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP

网络通信框架Apache MINA

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发.串口通讯程序. Mina 的应用层: 一个设计成熟的开源框架,总是会仅可能的减少侵入性,并在整个项目中找到合适的位置,而不应对整个项目的构架设计产生过多的影响,图 1 就是 MIN

Apache Mina 2.x 框架+源码分析

源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoAcceptor 与 IoConnector通讯) 客户端: 1)通过SocketConnector同服务器端建立连接. 2)链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的. 3)通过I/O Processor读取的数据经过IoFilterChain

apache MINA之心跳协议运用

摘要 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实现,后来突然发现MINA本身带有这样一个心跳实现,感于对框架的小小崇拜,在实践的同时研究了一下! MINA TCP/IP SOCKET 心跳 MINA本身提供了一个过滤器类: org.apache.mina.filter.keepalive . KeepAliveFilter ,该过滤器用于在IO空闲的时候发送并且反馈心跳包(keep-alive request/res

基于Apache mina 的android 客户端tcp长连接实现

TCP-long-connection-based-on-Apache-mina 基于Apache mina 的tcp长连接实现,可用于android客户端推送. 项目Github地址:https://github.com/sddyljsx/Android-tcp-long-connection-based-on-Apache-mina 项目将Apache的mina项目移植到了android平台.实现长连接的主要思想是使用了mina的KeepAliveFilter过滤器. acceptor.ge

使用Apache MINA框架搭建服务端

使用MINA框架搭建服务端步骤: 1.定义一个启动服务的类MinaServer,并实现接口ServletContextListener 2.定义一个处理业务逻辑的类MinaServerHandler,并继承类IoHandlerAdapter 类MinaServer代码例如以下: import java.net.InetSocketAddress; import javax.servlet.ServletContextEvent; import javax.servlet.ServletConte

Apache Mina框架实践

1.为什么要用Apache Mina框架 ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步IO 默认使用的是JAVANIO 作为底层支持)操作的编程模型. 2.ApacheMina框架使用 Mina的执行流程: > IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立. > IoProcessor:这个接口在另一个线程上

Apache Mina框架自身实现的过滤器

在Apache Mina中,IoFilter介于IoService和IoHanlder之间,该IO过滤器对所有的输入.输出事件进行过滤,其在Apache Mina中的地位不可忽视,Apache Mina框架自身实现了很多过滤器,现将其作用总结一下: 1.BlacklistFilter:该过滤器称为黑名单过滤器,该过滤器用于阻止特定IP地址的访问Apache Mina服务端.其使用方法如下: private void addFilter(IoAcceptor acceptor) throws Un