MINA的session.close

现象:客户端session.close之后,并没有提出,客户端程序一直hold在那里;

解决:调用了session.getService().dispose(false)方法后,客户端程序完成了退出

原因分析:一个connetor创建了之后,在创建之初职责是创建连接,session即使关闭了并不会触发Service关闭(connector以及Acceptor基类都是service),如果想要退出程序,只有通过session获得其所在容器(Service),对Service进行关闭(dispose)才会关闭;在测试过程中发现要退出只能是调用dispose(false),不做等待,如果调用了dispose(true)仍然处于Hold状态。

现象:客户端session.close()之后,服务器端CPU直线上升;而且服务器端并没有触发SessionClose事件;只有当session.getService().dispose(false)之后,才会触发sessionClose事件;

解决:重写了IoHandler里面的inputClose方法,手工调用session.Close;

原因分析:看了一下inputClose的注释:Handle the closure of an half-duplex TCP channel,说明是处理对端链接关闭的事件;如果你的Handler是继承自IoHandlerAdapter的话,那么这个基类里面已经实现了inputClose,并且在里面关闭了session;但是如果你继承的是接口IoHandler,那么当对方关闭的时候,通知的是MINA的inputClose方法;将会因为网络链接单方面关闭,导致服务器端去不断轮询客户端;

另外对于调用session.getService().dispose(false)之后,才会触发sessionClose,这是因为客户端connetor的终止,将会通知服务器端,服务器将会遍历该和该端的所有session(可能是根据RemoteAddress),然后调用对应session的close方法,进而触发了sessionClose事件;

时间: 2024-10-29 19:11:52

MINA的session.close的相关文章

mina.net 梳理

LZ最近离职,闲着也是闲着,打算梳理下 公司做的是电商,CTO打算把2.0系统用java 语言开发,LZ目前不打算做java,所以 选择离职.离职前,在公司负责的最后一个项目 供应链系统. 系统分为 3套子系统: 1 供应链工作平台(即用户操作平台):采用CS架构,Sqlite做缓存. 2 消息中心: 后台程序,采用mina.net,scoket 长连接 保证服务消息的 推送,后台消息的提醒,和 系统对最新订单的缓存. 3 WindowsService 监控消息中心,保证消息中心 随系统的开启而

Apache Mina

初步接触RPC通信框架,目前有很多优秀的RPC框架,今天我参考该博文:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html 学习了Aapche Mina通信框架.博主介绍的非常详细,包括Mina的源码流程,这里通过阅读博主的文章进行了学习记录,方便以后需要时使用. Apache Mina 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP

Mina airQQ聊天 服务端篇(二)

Mina聊天服务端实现思路:在用户登录的时候.连接服务端而且验证登录用户,假设成功,则将IoSession保存到map<账号,IoSession>中,而且通知该用户的好友上线,然 后再请求好友列表:若不成功,则断开连接. 自己定义协议格式:包头+包体 包头(10字节):包头长度(short)+ 消息类型(byte)+ 内容类型(byte) +  消息命令(short)+ 包体长度(int) 包体:JSON字符串 自己定义编码解码:因为数据在网络传输过程中都是以二进制传输的,所以我们能够自己定义

MINA经典入门例子----Time Server

原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例为MINA官方Demo翻译过来而已. MINA百科: Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MI

大并发量socket 通信框架MINA介绍

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发.串口通讯程序. Mina 的应用层: 一个设计成熟的开源框架,总是会仅可能的减少侵入性,并在整个项目中找到合适的位置,而不应对整个项目的构架设计产生过多的影响,图 1 就是 MIN

网络通信框架Apache MINA

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发.串口通讯程序. Mina 的应用层: 一个设计成熟的开源框架,总是会仅可能的减少侵入性,并在整个项目中找到合适的位置,而不应对整个项目的构架设计产生过多的影响,图 1 就是 MIN

Apache Mina 2.x 框架+源码分析

源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoAcceptor 与 IoConnector通讯) 客户端: 1)通过SocketConnector同服务器端建立连接. 2)链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的. 3)通过I/O Processor读取的数据经过IoFilterChain

Mina入门教程(二)----Spring4 集成Mina

在spring和mina集成的时候,要十分注意一个问题:版本. 这是一个非常严重的问题,mina官网的demo没错,网上很多网友总结的代码也是对的,但是很多人将mina集成到spring中的时候,总是会发现有个问题: java.lang.IllegalArgumentException: Cannot convert value of type [org.apache.mina.integration.beans.InetSocketAddressEditor] to required type

Mina框架研究

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架. 这个框架的优点: – 异步 – 无阻塞 – 事件驱动 – 支持TCP, UDP, APR, 串口- – 通过 过滤器(Filters)实现扩展性 – 同时提供协议框架 总体框架 之前的一个项目用到了MINA,最近想再系统的整理一下,主要参考MINA 2.0 User