mina连接莫名断开,是不是有什么特殊属性要设置?

发布于 2021-11-30 10:57:36 字数 2031 浏览 819 评论 5

用mina做了一个客户端,由于初学和业务的需要,这里采用了同步方式来进行通信。

在和第三方服务器的通信过程中,经常发生超时的现象,经过跟踪调试发现,超时请求发出之前,自己维护的IoSession对象已断开了连接(即isConnected()返回true)。

同样的事情,同事用C++写的客户端,一次断连的情况都没发生过。虽然我在请求发出之前重连了断开的连接,解决了问题,但是还是不解为什么会出现比较频繁的断连,handler里的sessionClosed事件会被触发很多次,客户端亦无主动断开连接的代码。连接的代码如下:

private boolean connect(){
		connector = new NioSocketConnector();
		
		DefaultIoFilterChainBuilder chain = connector.getFilterChain();
		
		chain.addLast("mdc", new MdcInjectionFilter());		
		chain.addLast("codec", new ProtocolCodecFilter(new ATClientCodecFactory(Charset.forName("GB2312")))); 		
		chain.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));
		
		chain.addLast("logging", new LoggingFilter()); 
		
		connector.setHandler(new ATClientHandler()); 		         
		
        //ConnectFuture 
        cf = connector.connect(new InetSocketAddress(address, port)); 
        
        // Wait for the connection attempt to be finished.
        cf.awaitUninterruptibly();
        
        if(cf.isConnected()){        
        	session = cf.getSession();
        	//TODO remove idle in 2013-01-22
        	//session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60 * 5);
        }else{
        	//connector.dispose(true);
        	LOGGER.error("连接失败,注销连接器");
        }
        return cf.isConnected();
	}
handler中部分代码:

@Override
	public void sessionCreated(IoSession session) throws Exception {
        // Empty handler
		SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();
        cfg.setUseReadOperation(true);
        cfg.setWriteTimeout(30);
        cfg.setKeepAlive(true);
        cfg.setSoLinger(0);
        cfg.setTcpNoDelay(true);
    }
	
	@Override
	public void sessionClosed(IoSession session) throws Exception {
		LOGGER.info("session"+session.getId()+" closed from " + session.getRemoteAddress());
	}
欢迎各位来指点迷津,先谢过了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情场扛把子 2021-12-03 16:28:48

mina客户端10s发送心跳仍然没有效果,收到服务器的心跳应答不到几秒就会弹出连接超时

无人问我粥可暖 2021-12-03 16:20:06

mina 的心跳推荐是最好在60秒以内

还可以设置链路超时时间

做个少女永远怀春 2021-12-03 16:11:53

mina 的心跳推荐是最好在60秒以内

还可以设置链路超时时间

顾忌 2021-12-03 16:07:21

起初我是做了心跳的,2分钟未有读写发生就请求一次系统时间(有读写发生应该不会超时吧?),是不是这个时间太长?

拥有 2021-12-03 16:01:32

socket连接超时了吧,mina有默认设置的吧,最好有心跳检测

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文