mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From 西城 (JIRA) <j...@apache.org>
Subject [jira] [Updated] (DIRMINA-1071) ReadFuture.awaitUninterruptibly(20, TimeUnit.SECONDS) is no use
Date Fri, 22 Sep 2017 01:16:02 GMT

     [ https://issues.apache.org/jira/browse/DIRMINA-1071?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

西城 updated DIRMINA-1071:
------------------------
     Attachment: T}FF(HQ$G8WJ][7ZY7F0]2W.png
                 {M{}J$JUT1C401($NIYJ@TM.png
    Description: 
Describe my problem:i want to send message to client for three times, when the first time
I send to client,but client doesn't answer ,So I try to send again,When the second time I
send,I can receive the answer ,But my core is struck in ReadFuture.awaitUninterruptibly(20,
TimeUnit.SECONDS) until cancel.That is my code,Thanks to answer.


{code:java}
if (future.isWritten()) {
			log.debug("成功发送数据" + protocolMsgVO.toByteString());
			ReadFuture readFuture = session.read();
			BaseProtocolMsgVO msgReceive = null;
			// 等待数据读取完成 等待10s 如果没有返回 关掉连接
			if (readFuture.awaitUninterruptibly(20, TimeUnit.SECONDS)) {
				msgReceive = (BaseProtocolMsgVO) readFuture.getMessage();
			} else {
				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
				if(count >= 3){
					log.info("重发超过三次,断开连接");
					// 关掉连接
					session.closeNow();
					throw new BusiException("读取设备响应数据超时");
				}else{
					log.info("重发次数:"+count);
					session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
					sendCmd(deviceIp, protocolMsgVO, pk_user, openid);
				}
				
			}
			//重置重发次数
			session.setAttribute("count", 0);
			if (readFuture.getException() != null) {
				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
				// 关掉连接
				session.closeNow();
				throw new BusiException(readFuture.getException().getMessage());
			}
{code}


That's my server log and tcp log 
!attachment-name.jpg|thumbnail!


  was:
Describe my problem:i want to send message to client for three times, when the first time
I send to client,but client doesn't answer ,So I try to send again,When the second time I
send,I can receive the answer ,But my core is struck in ReadFuture.awaitUninterruptibly(20,
TimeUnit.SECONDS) until cancel.That is my code,Thanks to answer.

if (future.isWritten()) {
			log.debug("成功发送数据" + protocolMsgVO.toByteString());
			ReadFuture readFuture = session.read();
			BaseProtocolMsgVO msgReceive = null;
			// 等待数据读取完成 等待10s 如果没有返回 关掉连接
			if (readFuture.awaitUninterruptibly(20, TimeUnit.SECONDS)) {
				msgReceive = (BaseProtocolMsgVO) readFuture.getMessage();
			} else {
				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
				if(count >= 3){
					log.info("重发超过三次,断开连接");
					// 关掉连接
					session.closeNow();
					throw new BusiException("读取设备响应数据超时");
				}else{
					log.info("重发次数:"+count);
					session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
					sendCmd(deviceIp, protocolMsgVO, pk_user, openid);
				}
				
			}
			//重置重发次数
			session.setAttribute("count", 0);
			if (readFuture.getException() != null) {
				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
				// 关掉连接
				session.closeNow();
				throw new BusiException(readFuture.getException().getMessage());
			}


> ReadFuture.awaitUninterruptibly(20, TimeUnit.SECONDS) is no use
> ---------------------------------------------------------------
>
>                 Key: DIRMINA-1071
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1071
>             Project: MINA
>          Issue Type: Bug
>    Affects Versions: 2.0.16
>            Reporter: 西城
>         Attachments: {M{}J$JUT1C401($NIYJ@TM.png, N8@`F_%~AEU2MYVTE]IG~IY.png, T}FF(HQ$G8WJ][7ZY7F0]2W.png
>
>
> Describe my problem:i want to send message to client for three times, when the first
time I send to client,but client doesn't answer ,So I try to send again,When the second time
I send,I can receive the answer ,But my core is struck in ReadFuture.awaitUninterruptibly(20,
TimeUnit.SECONDS) until cancel.That is my code,Thanks to answer.
> {code:java}
> if (future.isWritten()) {
> 			log.debug("成功发送数据" + protocolMsgVO.toByteString());
> 			ReadFuture readFuture = session.read();
> 			BaseProtocolMsgVO msgReceive = null;
> 			// 等待数据读取完成 等待10s 如果没有返回 关掉连接
> 			if (readFuture.awaitUninterruptibly(20, TimeUnit.SECONDS)) {
> 				msgReceive = (BaseProtocolMsgVO) readFuture.getMessage();
> 			} else {
> 				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
> 				if(count >= 3){
> 					log.info("重发超过三次,断开连接");
> 					// 关掉连接
> 					session.closeNow();
> 					throw new BusiException("读取设备响应数据超时");
> 				}else{
> 					log.info("重发次数:"+count);
> 					session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
> 					sendCmd(deviceIp, protocolMsgVO, pk_user, openid);
> 				}
> 				
> 			}
> 			//重置重发次数
> 			session.setAttribute("count", 0);
> 			if (readFuture.getException() != null) {
> 				session.getConfig().setUseReadOperation(false); // 设置为不需要读取数据
> 				// 关掉连接
> 				session.closeNow();
> 				throw new BusiException(readFuture.getException().getMessage());
> 			}
> {code}
> That's my server log and tcp log 
> !attachment-name.jpg|thumbnail!



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message