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事件;
MINA的session.close的更多相关文章
- mina通信 demo
1,要用到4个jar 2,服务端 package mina.server; import java.io.IOException; import java.net.InetSocketAddress; ...
- Mina入门实例(一)
mina现在用的很多了,之前也有用到,但是毕竟不熟悉,于是查了一些资料,做了一些总结.看代码是最直观的,比什么长篇大论都要好.不过其中重要的理论,也要理解下. 首先是环境,程序运行需要几个包,这里用m ...
- Mina入门教程(二)----Spring4 集成Mina
在spring和mina集成的时候,要十分注意一个问题:版本. 这是一个非常严重的问题,mina官网的demo没错,网上很多网友总结的代码也是对的,但是很多人将mina集成到spring中的时候,总是 ...
- java socket 多线程通讯 使用mina作为服务端
客户端代码不变,参照 http://www.cnblogs.com/Westfalen/p/6251473.html 服务端代码如下: import java.io.IOException; impo ...
- Apache MiNa 实现多人聊天室
Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...
- MINA系列学习-mina整体介绍
今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法.我倒是想从mina源码的结构和功能上对这个框架进行剖析.源码的阅 ...
- Mina 快速入门
Mina是什么 Mina是一个基于NIO的网络框架,使用它编写程序时,可以专注于业务处理,而不用过于关心IO操作.不论应用程序采用什么协议(TCP.UDP)或者其它的,Mina提供了一套公用的接口,来 ...
- NIO框架Mina学习
前言: 找了篇文章看了看,nio框架数Mina用的最多! 代码: 服务端: package com.mina; import java.net.InetSocketAddress; import ja ...
- java-通讯stocket插件mina实例
mina是对nio的具体实现.是目前比较高效和流行的nio(非阻塞式I/O)框架 mina主要包括: 其中服务端为:NioSocketAcceptor 客户端为:NioSocketConnector ...
随机推荐
- AFNetworking 3.0迁移指南
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...
- Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)
一:简介: 在上一篇<Android实现圆形.圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)>博文中,采用BitmapShader方法实现自定义的圆形.圆角等自定 ...
- C#多线程编程(1):线程的启动
转:http://blog.csdn.net/zhoufoxcn/article/details/4402999 在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来 ...
- [置顶] Datalist嵌套datalist,页面传值,加密,数据绑定
<asp:DataList ID="dlMajor" runat="server" CssClass="dllist" OnItemD ...
- YII中面包屑制作(当前位置:网站首页 >> 会员登陆)
面包屑制作(当前位置:网站首页 >> 会员登陆) 作用:就是在布局里要显示的信息,但这个信息在不同的页面里显示的内容不一样,例如:网页的title.网页的当前位置等等 1.布局中每个页面t ...
- C# 调用Java Webservice 加入SoapHeader 验证信息
C#调用java 编写的webservice时不会自动生成 soapheader 类接口的,需要改动Reference.cs. 在生成的代理类referende.cs中进行如下操作: 一.在声明pub ...
- 高性能web站点建设(一)
一.等待 客户端发送请求到服务端相应请求的过程,是需要等待的,而等待时间的长短通常是衡量这个网站“快慢”的重要指标,在这等待的时间里,到底发生了什么?概括来说经历了以下几个部分时间: 数据在网络上传输 ...
- 【转】【JavaScript】禁用backspace键的后退功能,但是可以删除文本内容
在JavaScript中添加以下代码,就可实现 禁用backspace键的后退功能,但是可以删除文本内容 // 禁用backspace键的后退功能,但是可以删除文本内容 document.onkeyd ...
- c#调用c++ dll(一)
首先来说说c++中的dll 核心的一些知识 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在构造其它软件系统时 ...
- php中实现精确设置session过期时间的方法
http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下sessio ...