Mina IoSession playload对象为空的问题分析
程序员文章站
2022-03-11 09:43:08
...
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毫秒,服务端就没有遇到类似的问题了
上一篇: H5页面音视频自动播放