关闭mina服务_如何彻底关闭MINA客户端

在使用MINA做客户端程序时,发现虽然调用了session.close()方法,通过日志也确实看到当前session已经被关闭了,但未什么客户端程序进程却没有停止呢?即MINA客户端没有根本的关闭。这个现象在版本1和2中都存在。这是MINA的bug吗???其实不然...

我们可以启动2个服务器端,然后用同一个connector实例来连接这2台服务器,通过结果可以发现2个连接是相互独立工作的,及connector和session不是一对一的。

通过查阅API和源代码,我们可以发现这里的connector实际是一个连接管理器,其内部通过一个connectQueue队列同步存储一个连接列表。并在调用connect()方法时,将当前连接请求注册到队列中;同时connector中启动着一个内部的Worker(工作线程)来管理这些连接。当我们关闭某个session之后,只是关闭了某个请求,工作线程其实并没有被关闭,所以出现程序没有停止的现象。

MINA1.1.7

可以通过设置工作超时来关闭连接,当所有的连接都被关闭后worker线程将停止,即connector停止。

connector.setWorkerTimeout(1); //1秒钟(默认超时60秒)

PS:Worker定义在SocketConnector类中,内部直接实现管理

MINA2.0

可以调用connector的dispose()方法。该方法通过调用ExecutorService的shutdown()方法停止业务处理线程,并设置内部disposed标志位标识需要停止连接管理器;Worker线程通过该标识停止。

connector.dispose();

PS: Worker定义在AbstractPollingIoConnector类中,disposed标志在AbstractIoService类中,通过dispose()方法停止ExecutorService并设置disposed标志

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-02-17 11:06

浏览 11174

评论

5 楼

huangchao1010

2012-11-20

服务器端在handler里设置超时就行了,超时就会将客户端的连接给干掉。

4 楼

kunsyliu

2012-10-11

0956f0a970daab536ce4be0ee96b00ac.gif 

38687d1a1ad71d37c86f287056834d1a.gif

我才接触mina昨天遇到这问题头都大了,还郁闷了好一整天。

看了这篇博客帮助非常大,。

关闭mina客服端,应该还加上:

//Wait for the connection attempt to be finished.

//IoSession session = future.getSession();

session.getCloseFuture().awaitUninterruptibly();

connector.dispose(); //NioSocketConnector

2fd2d9c1d175d11752585fa9b76aba29.gif 

dac4074c17d1cb3cd8fff59f5e99a670.gif

3 楼

lindaiyu_1130

2012-09-01

dispose之后我想再重新启用这个connector,该怎么办呢?

2 楼

kuro_0505

2009-03-06

这个是关闭客户端的,那如果客户端关闭了之后,能不能让服务端来关闭这个相关的session呢?

1 楼

kuro_0505

2009-03-06

我也碰到这个问题了,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值