欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mina重连 千万别这么干

程序员文章站 2022-04-11 09:51:47
...

以前写了一篇介绍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/ ! 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!