Apache Mina开发手册
一、介绍
Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。
Apache Mina经常用作:
1)NIO框架库
2)客户端/服务器通信框架库
3)网络Socket通信库
Apache Mina还伴随有不少子项目:
1)Asyncweb
构建于Apache Mina异步框架之上的HTTP服务器
2)FtpServer
一个FTP服务器
3)SSHd
一个Java库,支持SSHH协议
4)Vysper
一个XMPP服务器
二、Apache Mina下载
下载最新的Mina v2.0.8版
地址见:
三、用Mina开发时间服务器
说明一下,其实是基于官方的例子,略作了修改,因为发现官方的例子太陈旧,甚至包含了deprecated的方法。
1、先决条件
Apache Mina 2.0.8 Core
JDK 7
SLF4J+LOGBACK
2、项目依赖包
mina-core-2.0.8.jar
slf4j-api-1.6.6.jar
3、编写基于Mina的Time服务器
-
package ch.chiqms.server;
-
-
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;
-
-
public class MinaTimeServer {
-
private static final int PORT = 9123;
-
public static void main(String[] args){
-
// 监听连接的对象
-
IoAcceptor acceptor = new NioSocketAcceptor();
-
-
// 配置过滤器
-
// logger过滤器会输出所有的信息,例如新创建的会话、消息的接收、消息的发送、会话的关闭
-
// codec过滤器会转换二进制活协议规定的数据为消息对象,这里是处理基于文本的消息
-
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
-
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(
-
new TextLineCodecFactory(Charset.forName("UTF-8"))));
-
-
//
-
acceptor.setHandler(new TimeServerHandler());
-
-
// 设置输入缓冲区的大小和会话的IDLE熟悉
-
acceptor.getSessionConfig().setReadBufferSize(2048);
-
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
-
-
try {
-
acceptor.bind(new InetSocketAddress(PORT));
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
4、编写Time服务的Handler
-
package ch.chiqms.server;
-
-
import java.text.SimpleDateFormat;
-
import java.util.Calendar;
-
-
import org.apache.mina.core.service.IoHandlerAdapter;
-
import org.apache.mina.core.session.IdleStatus;
-
import org.apache.mina.core.session.IoSession;
-
-
public class TimeServerHandler extends IoHandlerAdapter {
-
-
@Override
-
public void exceptionCaught(IoSession session, Throwable cause)
-
throws Exception {
-
cause.printStackTrace();
-
}
-
-
@Override
-
public void messageReceived(IoSession session, Object message) throws Exception {
-
String str = message.toString();
-
if(str.trim().equalsIgnoreCase("quit")){
-
session.close(true);
-
return;
-
}
-
Calendar time = Calendar.getInstance();
-
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
session.write(df.format(time.getTime()));
-
System.out.println("Time Message written...");
-
}
-
-
@Override
-
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
-
System.out.println("IDLE "+session.getIdleCount(status));
-
}
-
-
}
5、运行MinaTimeServer
在命令行输入telnet 127.0.0.1 9123
服务器端的输出也可以看到:
阅读(5194) | 评论(0) | 转发(0) |