首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Mina重连 千万别这样干

2014-01-06 
Mina重连 千万别这么干以前写了一篇介绍Mina简单示例的文章:Mina TCP服务端客户端 示例在初始化客户端连接

Mina重连 千万别这么干

以前写了一篇介绍Mina简单示例的文章:Mina TCP服务端客户端 示例

在初始化客户端连接的时候,我是在构造方法里面写的:

public MinaTcpClient() {connector = new NioSocketConnector();connector.setHandler(this);ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", MinaTcpServer.PORT));connFuture.awaitUninterruptibly();session = connFuture.getSession();System.out.println("TCP 客户端启动");}

?

那客户端会有中断的情况,那就得重连吧,怎么重连,马上想到的就是不断创建MinaTcpClient对象,或者把Mina的对象都重新创建一次。

是的,我就是这么干的,当时确实没注意。后来发现,总是死机,现象是Tomcat没有死,而是该程序宕机了。

我开始认为是其他问题,后来使用JDK自带的jconsole查看(如果默认安装,路径是C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe),发现对象一直在无限制增加,而内存和CPU却没有太多的变化,加上每次都是服务端宕机时这边才会出现宕机,我在想应该就是不断重连带来的问题。

我尝试把一些方法内的变量提取到类里面,使用时再进行NEW操作,可是仍然不能解决问题。偶然看到NioSocketConnector这个对象,联想到JDBC连接池,我貌似找到了问题的所在。

于是我把NioSocketConnector实例对象单例化,只是通过NioSocketConnector对象的connect方法不断获取ConnectFuture然后来获得会话,等于整个过程我不会自己去NEW对象。

测试后发现问题解决。

这里就先说一下问题现象和问题是怎么解决的吧,后续我们再继续讨论这个问题。

?

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/?!?

热点排行