1.工作中用到mina,需要保存一个会话对象以保存一些数据
2.代码都是照搬的,但是在这个方法
中做了这么个操作
3.客户端在创建套接字后,立即发送数据,结果出现了等待的死机现象,一直停留在等待获取数据状态
4.分析了半天定位到了上面那段代码。为什么appSession 为空呢,
在
这段代码中已经将AppSession 作为playload放入IoSession里了
5.但是就是获取不到,打断点跟踪的时候又可以到值,估计是由于客户端发送数据太快,服务段的put操作没有完成就获取到客户端的数据请求,进入messageReceived方法,所以暂时在客户端创建连接后停100毫秒,服务端就没有遇到类似的问题了
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毫秒,服务端就没有遇到类似的问题了