MINA学习之IoService
从上一篇文章中知道,IoService出于MINA体系中的底层。IoService将会帮你维护网络交互,接受消息,发送消息,管理Sessions,管理连接Connections等等。
IoService 是一个接口,服务端的IoAcceptor和客户端的IoConnector均继承了该接口。下面我们将分为以下几个部分介绍IoService
1. IoService Introduction
2. IoService Details
3. IoAcceptor
4. IoConnector
IoService Introduction
如上图,IoService有很多的职能:
1. sessions的管理: 创建和删除sessions, 检查session的空闲状态
2. 过滤连的管理: 管理过滤连,允许用户改变filter chain
3. 回调:当有消息抵达时调用IOHandler
4. 统计管理:统计更新消息的发送次数
5. 监听管理:Manages the Listeners a suer can set up
6. 传输管理: 处理服务端和客户端之间数据的传输
IoService接口提供了以下方法:
1. getTransportMetaData()--该方法返回IoAcceptor,IoConnector在运行时的元数据,包括运营商名称,连接的类型等
2. addListener()--该方法为IoService添加一个IoServiceListener来侦听指定的事件
3. removeListener()--该方法从IoService中移除指定的IoServiceListener
4. isDisposing()--该方法返回IoService是否正在停止
5. isDisposed()--该方法返回IoService是否已经停止
6. dispose()--该方法用于释放IoService分配的所有资源
7. getHandler()--获取该IoService所分配的IoHandler
8. setHandler()--返回分配给该IoService的IoHandler
9. getManagedSessions()--返回当前被IoService管理的所有Session的Map集合
10. getManagedSessionCount()--返回当前被IoService管理的所有Session的大小
11. getSessionConfig()--获取session的配置类
12. getFilterChainBuilder()--返回FilterChain Builder,用于向已创建的session中加入新的Filter
13. setFilterChainBuilder()--为IoService定义一个Filter Chain Builder
14. getFilterChain()--获取当前的Filter Chain
15. isActive()--返回IoService是否处于活动状态
16. getActivationTime()--返回IoServcie被激活的时间
17. broadcast()--将消息发送给所有被管理的Sessions
18. setSessionDataStructureFactory()--
19. getScheduledWriteBytes()--返回将要被发送的字节数
20. getScheduledWriteMessages()--返回将要被发送的消息数
21. getStatistics()--为IoService返回IoServiceStatistics对象
IoService Details
IoAcceptor
1. NioSocketAcceptor:无阻塞(non-blocking)面向socket连接的IoAcceptor
1. creation:创建
public TcpServer() throws IOException {
// Create a TCP acceptor
IoAcceptor acceptor = new NioSocketAcceptor();
// Associate the acceptor to an IoHandler instance (your application)
acceptor.setHandler(this);
// Bind : this will start the server...
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Server started...");
}
// Create a TCP acceptor
IoAcceptor acceptor = new NioSocketAcceptor(); // Associate the acceptor to an IoHandler instance (your application)
acceptor.setHandler(this); // Bind : this will start the server...
acceptor.bind(new InetSocketAddress(PORT));
}
2. disposal : 关闭
// Stop the service, waiting for the pending sessions to be inactive
acceptor.dispose();
// Stop the service, waiting for the processing session to be properly completed
acceptor.dispose( true );
3. status:状态
4. 管理IoHandler
5. 管理Filter Chain
// Add a logger filter
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("logger", new LoggingFilter());
// Add a logger filter
DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
chain.addLast("logger", new LoggingFilter()); // And inject the created chain builder in the service
acceptor.setFilterChainBuilder(chain);
IoConnector
MINA学习之IoService的更多相关文章
- 【MINA学习笔记】—— 1.体系结构分析[z]
前言 Apache的MINA框架是一个早年非常流行的NIO框架,它出自于Netty之父Trustin Lee大神之手.虽然目前市场份额已经逐渐被Netty取代了,但是其作为NIO初学者入门学习框架是非 ...
- MINA学习汇总
MINA学习汇总 Apache Mina Server 是一个网络通信应用框架,用于开发高性能和高可用性的网络应用程序.它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA ...
- mina学习
长连接表示一旦建立了链接,就可以长时间的保持双方的通讯,例如: socket链接,推送平台. 短链接表示建立链接,完成数据的交换之后,就断开链接,例如: http链接. mina 框架是对socket ...
- mina学习(一)
Mina:是一个帮助用户开发高性能和高伸缩性网络应用程序的框架 学习地址链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html ...
- Mina学习之---mina整体流程介绍
现在公司使用的NIO框架一直时候Mina,当然这也的框架还有Netty.虽然一直在用,但只是简单的停留在业务层面,最近面试的时候有问Mina相关的东西.在之前的博客中已经对BIO,NIO,AIO这三种 ...
- Mina学习之IoFilter
IoFilter 是MINA中的一个核心结构,扮演了非常重要的角色.IoFilter在IoService和IoHandler过滤了所有的I/O 事件和请求.如果你有做个web项目的经验,则很类似于we ...
- MINA学习之体系介绍
基于MINA应用程序结构图: 我们可以看出,MINA是应用程序(客户端或服务端)和底层基于TCP,UDP等通讯协议的网络层之间的粘合剂.而且各个模块之间是相互独立的,你只需要在MINA体 系基础上设计 ...
- mina学习总结
一.简介: Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步 IO 默认使用 ...
- NIO框架Mina学习
前言: 找了篇文章看了看,nio框架数Mina用的最多! 代码: 服务端: package com.mina; import java.net.InetSocketAddress; import ja ...
随机推荐
- python学习笔记enumerate()与range(len)运用及赋值小计
#!/uer/bin/env python # _*_ coding: utf-8 _*_ #格式1 a = 'abc' for i in range(len(a)): print a[i],'(%d ...
- OS概论2
实时系统 实时即表示及时,实时计算可以定义为这样一类计算:系统的正确性,不仅由计算的逻辑结果来确定,而且还取决于产生结果的时间.事实上,实时系统最主要的特征,是将时间作为关键参数,它必须对所接收到的某 ...
- Djang DJANGO_SETTINGS_MODULE
在 site-packages\django 新建一个文件 ’settings.py‘ 内容如下: DEBUG = TrueDEFAULT_FROM_EMAIL = 'alangwansui@qq.c ...
- sql 判断一个表的数据不在另一个表中
SELECT a.* FROM a LEFT JOIN b ON a.key = b.key WHERE (b.key IS NULL) end as flag from a select id fr ...
- 为你的TabBar添加Badge-感谢分享
实现过程 首先定义了三种Badge类型 typedef NS_ENUM(NSUInteger, CustomBadgeType){ kCustomBadgeStyleRedDot, //显示普通红点类 ...
- chrome浏览器默认样式覆盖input背景
问题描述:input表单添加了背景图片,结果自动填充是,编程了一个淡黄色矩形方框. 解决方案:网上查询了很多的解决方式,基本都不管用,这里我简单说两个. 1.去除黄色背景 input:-webkit- ...
- Android中JNI编程的那些事儿(1)
转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...
- css3加载中
.loader { margin: 6em auto; font-size: 10px; position: relative; text-indent: -9999em; border-top: 1 ...
- [转贴]JAVA 百度地图SDK地图学习——实现定位功能
之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...
- python统计英文首字母出现的次数
使用python解析有道词典导出的xml格式单词,统计各个首字母出现的次数,并按次数由多到少进行排序 相关实现 导出的xml格式如下 <wordbook> <item> < ...