Mina使用总结
来源:互联网 发布:克利夫兰州立大学 知乎 编辑:程序博客网 时间:2024/06/05 01:13
Mina使用总结
第一步:编写IoService
这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立
IoService 本身既是服务端,又是客户端,我们这里编写服务端,所以使用IoAcceptor 实现
//创建一个非阻塞的server端Socket ,用NIO,初始化了服务端的TCP/IP 的基于NIO 的套接字
SocketAcceptor acceptor = new NioSocketAcceptor();
第二步:编写过滤器
IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、
数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode
是最为重要的、也是你在使用Mina 时最主要关注的地方。
过滤器IoFilter是MINA核心结构之一,它扮演着一个很重要的角色。它可以过滤所有在MINA服务和对应处理程序之间的I/O事件和请求。如果你有编写Java网络应用程序的经验,你可以放心的把他当做Servlet过滤器的一个远亲。MINA提供了很多现成的过滤器,它们通过简化典型的横切关注点,来加快网络应用程序的开发步伐。
过滤器
对应类
用法简述
Blacklist
BlacklistFilter
将黑名单中的远程地址的连接置为阻塞状态
Buffered Write
BufferedWriteFilter
缓冲传出的请求,类似于BufferedOutputStream的作用
Compression
CompressionFilter
压缩所有的数据
ConnectionThrottle
ConnectionThrottleFilter
连接调节器,当连接的速度快于指定的时间间隔时进行阻塞操作
ErrorGenerating
ErrorGeneratingFilter
Executor
ExecutorFilter
FileRegionWrite
FileRegionWriteFilter
KeepAlive
KeepAliveFilter
Logging
LoggingFilter
记录事件日志信息,如消息已接收,消息已发送,session打开等等
MDC Injection
MdcInjectionFilter
将IoSession的主键属性注入线程映射表MDC中
Noop
NoopFilter
只是用于测试并不进行实际操作的过滤器
Profiler
ProfilerTimerFilter
测量事件执行时间的过滤器,如消息已接收,消息已发送,session打开等事件的执行时间
ProtocolCodec
ProtocolCodecFilter
编码解码过滤器
Proxy
ProxyFilter
Reference counting
ReferenceCountingFilter
跟踪过滤器使用次数的过滤器
RequestResponse
RequestResponseFilter
SessionAttributeInitializing
SessionAttributeInitializingFilter
StreamWrite
StreamWriteFilter
SslFilter
SslFilter
WriteRequest
WriteRequestFilter
我们处理最简单的字符串传输,Mina 已经为我们提供了TextLineCodecFactory 编解码
器工厂来对字符串进行编解码处理。
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定为一行行的读取数据
ProtocolCodecFilter filter = new ProtocolCodecFilter(new TextLineCodecFactory());
chain.addLast("objectFilter",filter);
(注意:这里的过滤器其实有很多种,比如用protobuf时就要把过滤器改为StreamWriteFilter。这是因为protocol buf良好的支持字节流,所有要使用此过滤器)
第三步:编写IoHandler
//设定服务器消息处理器
acceptor.setHandler(new ClientMinaServerHandler());
而ClientMinaServerHandler类里面就是自己处理消息的具体发送与接收了
public class ClientMinaServerHandler extends IoHandlerAdapter
{
public void sessionCreated(IoSession session) {
............... }
public void sessionOpened(IoSession session) throws Exception {
.................
}
public void messageReceived(IoSession session, Object message)
throws Exception {
}
.................
}
第四步:绑定端口,启动服务器
//服务器绑定的端口
int bindPort = 8880;//自己定义的端口号
//绑定端口,启动服务器
try {
acceptor.bind(new InetSocketAddress(bindPort));
} catch (IOException e) {
System.out.println("Mina Server start for error!"+bindPort);
e.printStackTrace();
}
System.out.println("Mina Server run done! on port:"+bindPort);
}
- MINA框架使用总结
- MINA框架使用总结
- Mina使用问题总结
- MINA框架使用总结
- MINA框架使用总结
- MINA框架使用总结
- MINA框架使用总结
- Mina使用总结
- MINA框架使用总结-转贴
- Mina总结
- mina总结
- mina总结
- Mina使用
- mina正常关闭 避免address占用 使用总结
- Mina框架总结
- mina线程总结
- Mina源码总结(二)
- Mina学习总结
- 驱动与设备的匹配
- 短讯-曝皇马购切尔西巴西国脚 穆帅安帅转会战打响
- Java+HTML预习笔记_20140610
- 多特宣布罗伊斯休战三月缺席新赛季开局阶段
- 设备与驱动的匹配
- Mina使用总结
- poj 3101 Astronomy(分数的最小公倍数)
- Add multiple models in one view in MVC4
- ruby metaprogramming 0
- 巨人史玉柱:令人惊叹的优秀产品经理
- 各种排序
- 运算符重载的方式 双目运算符重载为类的成员函数
- Twitter创始人多西:从少年极客到壮年企业家
- swift 笔记 (九) —— 类和结构体