Mina IoSession playload对象为空的问题分析

阅读更多
1.工作中用到mina,需要保存一个会话对象以保存一些数据
2.代码都是照搬的,但是在这个方法
@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		ClientRequest clientRequest = (ClientRequest) message;
		AppSession appSession = AppSession.getInstance(session);
		if (appSession == null) {
			return;
		}
		GameServer.msgDispatcher.dispatchMsg(appSession, clientRequest);
	}

中做了这么个操作
if (appSession == null) {
     return;
}


3.客户端在创建套接字后,立即发送数据,结果出现了等待的死机现象,一直停留在等待获取数据状态
4.分析了半天定位到了上面那段代码。为什么appSession 为空呢,
public void sessionOpened(IoSession session) throws Exception {
		AppSession appSession = new AppSession(session);
		appSession.holdInIoSession();
		logger.info("a session create from ip {}", session.getRemoteAddress());
	}

这段代码中已经将AppSession 作为playload放入IoSession里了
5.但是就是获取不到,打断点跟踪的时候又可以到值,估计是由于客户端发送数据太快,服务段的put操作没有完成就获取到客户端的数据请求,进入messageReceived方法,所以暂时在客户端创建连接后停100毫秒,服务端就没有遇到类似的问题了

你可能感兴趣的:(mina)