Apache MINA(Multipurpose Infrastructure for Network Applications)
官网http://mina.apache.org/
是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。 目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia
Flash Media RTMP)、ObjectRADIUS、Openfire 等等。
本文就介绍入门mina的入门,
参考文档http://mina.apache.org/mina-project/quick-start-guide.html
第一步、定义MinaTimeServer.java mina服务端
/**
*
*/
package com.figo.onlineshop.test;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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;
/**
* @author zhuzhifei
*
*/
public class MinaTimeServer {
private static final int PORT = 9123;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义socket接收器
IoAcceptor acceptor = new NioSocketAcceptor();
//添加日志记录
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
//添加编码解码器
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
//添加处理器(用于接收数据后处理处理数据逻辑)
acceptor.setHandler( new TimeServerHandler() );
//设置读取数据缓存单位byte
acceptor.getSessionConfig().setReadBufferSize( 2048 );
//设置多长时间后接收器开始空闲
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
try {
//绑定某个端口,作为数据入口
acceptor.bind( new InetSocketAddress(PORT) );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第二步、定义消息处理器TimeServerHandler.java
/**
*
*/
package com.figo.onlineshop.test;
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author zhuzhifei
*
*/
//必须继承IoHandlerAdapter
public class TimeServerHandler extends IoHandlerAdapter {
private final Logger logger = LoggerFactory.getLogger(MinaTimeServer.class);
//补抓异常
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
super.exceptionCaught(session, cause);
}
//获取客户端消息后处理逻辑
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
super.messageReceived(session, message);
String str = message.toString();
if( str.trim().equalsIgnoreCase("quit") ) {
session.close(true);
return;
}
Date date = new Date();
session.write( "current time:"+date.toString() );//该消息将返回给客户端
System.out.println("Message Received:"+str);
logger.info(date.toString()+"Message Received:"+str);//日志没有输出why?
}
//发送消息
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageSent(session, message);
}
//当前会话关闭
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
}
//创建会话
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionCreated(session);
}
//会话空闲
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
super.sessionIdle(session, status);
System.out.println( "IDLE " + session.getIdleCount( status ));
}
//打开会话
@Override
public void sessionOpened(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionOpened(session);
}
}
第三步、模拟客户端tcp调用
MinaTimeServer.java run as java Application后
C:\Documents and Settings\zhuzhifei>telnet 127.0.0.1 9123 连上服务器
客户端输入:abc后
服务端接收到:
2012-12-25 18:26:52 INFO com.figo.onlineshop.test.MinaTimeServer - Tue Dec 25 18:26:52 CST 2012Message Received:abc
客户端显示:current time:Tue Dec 25 18:26:52 CST 2012
转自【http://www.open-open.com/lib/view/open1375802152718.html】
分享到:
相关推荐
apache mina实例免费下载,有很多实例代码简单易懂欢迎大家下载!
apache mina 框架 实例 自定义协议包 自定义编码器 解码器 服务端 客户端
这个是我学的apache mina2.0学习笔记的实例
mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速...
基于Apache Mina实现的TCP长连接和短连接实例 详细说明,可参见blog http://blog.csdn.net/peterwanghao/article/details/6900523
至于MINA2是什么,这里就不介绍了,有兴趣的可以自己去问一下度娘!
Mina 2.0.16 简介 代码实例 Mina 是Apache开发的一个开源的网络通信框架,基于java NIO实现。 建立server与client之间的会话连接,对会话消息进行过滤; 非阻塞消息会话机制; 通过自定义的通信协议进行编解码消息。
ApacheMINA传递对象实例[借鉴].pdf
Apache Mina Server 是一个网络通信应用框架 基于 TCP/IP、UDP/IP协议栈的通信框架 支持串口和虚拟机内部的管道等传输方式 Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用 Mina 提供了事件驱动、异步操作...
NULL 博文链接:https://qianhao-1987.iteye.com/blog/1476125
Apache Mina Server 是一个网络通信应用框架,本项目是Mina开发的 服务端、客户端,例子,maven构建
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
mina 基础的入门实例,使用maven+jdk1.7进行构建,使用客户端直接可以进行测试
基于java NIO技术的TCP/UDP应用程序开发,串口通讯开发。 内部包含实例应用,有利于新手上手!
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步....第三步....第四步....第五步....二....三. Mina实例 50 四. 其他 50
MINA入门实例,实现长连接,短连接通讯。
apache mina性能测试实例 四台客户端机器,服务器能跑到1w。mina的jar包自己去下,我上传的其他资源里也有。
MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本