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 ...
随机推荐
- 常见排序算法(PHP实现)
function InsertSort($arr){ $num = count($arr); for($i = 1; $i < $num; $i++){ $key = $arr[$i]; for ...
- js获取get方式提交的参数返回json格式数据
/** * 获取GET提交的参数 * @return JSON格式 * @author Terry */ function getArgs(){ var args = {}; var match = ...
- Groovy 数组操作
将字符串转为map def str="['汤菜':['1000000028','1000000030'],'肉菜':['1000000032'],'素材':['1000000031']]&q ...
- yii之srbac详解
一.安装篇 1.下载http://www.yiiframework.com/extension/srbac/ 将解压得到的srbac文件夹放在moudles目录下. 2.在项目的主配置文件中mai.p ...
- (转载)在Delphi中利用MSDASC来配置数据库链接
在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...
- Linux下find指令
Linux是一个“一切皆文件”的操作系统,find(查找文件)指令就尤为重要了.find命令在目录结构中搜索文件,并执行指定的操作. 1.命令格式: find pathname -options [- ...
- 当今app行业 比较流行的 简称 汇总
B=Business,即企业:C=Customers,即消费者,这样就好理解这些简称了:M=Medium,即媒介B2B:(Business To Business)商家对商家进行交易 如:阿里巴巴.生 ...
- 第 4 章 多例模式【Multition Pattern】
以下内容出自:24种设计模式介绍与6大设计原则 这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还记得那首诗< ...
- Unity3d 协程的注意问题(新手须注意,老手须加勉)
关于unity3d的协程,非常的好用,比如等待几秒执行,等待下一帧执行等! 但是也有潜在的问题: 1.协程是单线程的,在主线程中完成 2.如果发现yield, 那么这一帧会结束,那么等下一帧调用此脚本 ...
- USB究竟是什么?看完这篇文章我就明白了!
在早期,USB接口的出现似乎仅仅是要解决一些简单外设诸如鼠标.键盘之类的设备与电脑的连接问题,很显然,这些外设所产生的数据量是极低的,所以,USB规范所定义的数据速率是1.5Mbps,数据还是双向分时 ...