欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-11 09:43:08
...
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