Java小强个人技术博客站点    手机版
当前位置: 首页 >> 开源 >> Mina重连 千万别这么干

Mina重连 千万别这么干

90721 开源 | 2014-7-30

以前写了一篇介绍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对象。
测试后发现问题解决。
这里就先说一下问题现象和问题是怎么解决的吧,后续我们再继续讨论这个问题。

推荐您阅读更多有关于“ tcp 网络编程 开源 宕机 示例 mina dup ”的文章

上一篇:Mina控制IP连接量和连接总数量 下一篇:Mina TCP服务端客户端 示例

猜你喜欢

发表评论:

评论:

回复 oo 评论于 2021-08-24 15:44
Test必须包含中文