我已经使用apache mina成功实现了服务器客户端 . 解决方案是,客户端向服务器发送ping,然后服务器响应客户端,运行正常 . 我两边都有处理程序 .
现在,我想在客户端实现重新连接机制,重新连接代码如下
boolean reconnectFinalStatus=false;
_logger.info("Session-"+session.getId()+"with Server-"+socketServerId+" is closed ["+session.isActive()+","+session.isConnected()+","+session.isClosing());
if(reconnectAttempts > 0 && connector!=null)
{
_logger.info("Reconnecting to Server-"+socketServerId+" reattempts configured is "+reconnectAttempts+" with reconnect interval being(in secs) "+reconnectInterval);
for(int i=1;i<=reconnectAttempts;i++)
{
_logger.info("Reconnect with Server-"+socketServerId+" reattempts ["+i+"] in progress");
ConnectFuture future=connector.connect(session.getRemoteAddress());
IoSession session1=future.getSession();
if(session1!=null)
{
_logger.info("Session-"+session1.getId()+"with Server-"+socketServerId+" reattempts ["+i+"] is successfull");
reconnectFinalStatus=true;
break;
}
else
{
_logger.info("Reconnect with Server-"+socketServerId+" reattempt ["+i+"] failed");
_logger.info("Reconnect with Server-"+socketServerId+" next reattempts will be tried after "+reconnectInterval +" secs");
Thread.sleep(reconnectInterval*1000);
}
}
}
else
{
reconnectFinalStatus=false;
}
if(!reconnectFinalStatus)//reconnect has failed, means false
{
_logger.info("Session-"+session.getId()+"with Server-"+socketServerId+", raising socket close event");
EventMessage eventMessage=new EventMessage();
eventMessage.setEventName("Socket Input Close Event");
eventMessage.setEventSourceId(pingSourceId);
eventMessage.setEventSourceName(pingSource);
eventMessage.setSocketServerId(socketServerId);
socketEventRegistrar.raiseEvents(eventMessage);
_logger.info("Session-"+session.getId()+"with Server-"+socketServerId+" is closed, event raised successfully");
}
}
这没有按预期工作 .
任何帮助表示赞赏
谢谢Arpit