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毫秒,服务端就没有遇到类似的问题了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值