wendu 发表于 2017-1-8 10:02:28

Apache Mina 2.0的学习研究(一)

  本人习惯学习新技术时根据API学习实例并在编码时写注释:
  今天学习Mina的服务段的编写:
  简单明了:
  源代码如下:
写道
package cn.com.unutrip.java.opensource.mina.guide;

import java.net.InetSocketAddress;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.IoBufferAllocator;
import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.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.NioSocketAcceptor;
/**
* 使用Mina 2.0 创建一个服务端
* @author longgangbai
*
*/
public class TimeServer {
@SuppressWarnings("unused")
private static final Log log = LogFactory
.getLog(ReadStyleTimeClient.class);
public static void main(String[] args) {
//设置改变默认的IoBuffer缓存的信息
IoBuffer.setUseDirectBuffer(true);
IoBuffer.setAllocator(new SimpleBufferAllocator());
//建立服务路端监听器的
//在传统服务端编程中,对于一个 TCP 服务器,我们需要先建立一个监听套接字。在 Mina 中,我们创建的并不是一个监听套接字,
//而是一个监听套接字工厂,或者称之为“监听器( acceptor )”。该概念映射到 Mina API 中,就是 IoAcceptor 接口及其
//各个实现类。
final IoAcceptor acceptor=new NioSocketAcceptor();
//设置事件的回调机制
//如果有什么业务基本上在次处理器中调用了
//TODO
//忽略
acceptor.setHandler(new IoHandlerAdapter(){
//服务端想客户端发送消息时使用
@SuppressWarnings("unused")
public void messageSend( IoSession session, Object message)
{
//向客户端写入消息
session.write(message);
//session.close(true);
}
//在开始IoSession创建时执行
public void sessionOpened(IoSession session)
{
//获取远程服务器的IP
System.out.println(session.getLocalAddress().toString());
session.write(new Date());
}
});
//设置文本编解码过滤器工厂
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory()));
//设置日志工厂过滤器
acceptor.getFilterChain().addLast("logging", new LoggingFilter());
try {
//设置绑定的端口
acceptor.bind(new InetSocketAddress(8123));
} catch (Exception e) {
e.printStackTrace();
}
}

  如果有不明白的可以讨论,学习,希望牛人不要拍砖!!
页: [1]
查看完整版本: Apache Mina 2.0的学习研究(一)