关于MINA的问题
服务器端利用MINA收发客户端发来的信息。
当一个客户端发送登录指令,服务端成功回复之后,服务端用TreeMap<key,client>来保存客户端的信息,并把IoSession保存在client里。这样当回复客户端发来的心跳指令的时候,直接client.getIoSession()获得IoSession来回复。
最近这样出现一个问题,在我查看登陆客户端信息的时候,有时2个,有时好几个重复的现象。
client的信息都是从Map里通过key来获得,理论上是不应该出现重复现象的,但是他出现了。
这个问题有时候会出现,有时候会在服务端运行一段时间后出现,反正不确定。当出现这个问题的时候在向客户端发送指令的时候,就不会成功了,指令也会发送,但是客户端已经不回应了。
最近也是开始学MINA,对于它的机制,还不是很了解。是不是IoSession混乱导致的?望大哥大姐大妈大姨门帮帮小弟。
感激涕零。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果没有什么限制建议一个服务端只允许一个ip有一个连接,如果重复连接,断掉前次连接重新建立新连接。
这样维护连接最好。我现在就是这样做的。
你的 key是每个用利登录一次就产生一个的吗,还是每个用户使用固定的如用户ID
如果是前者,那么就需要有timeout时间了,因为mina是nio的,也就是说当客户端没有信息时他是不会激活任何操作的,包括close
通常这个是客户端直接kill线程做成的,没有正常调用close
IoSession 已经表示一个会话了,还自己再弄一个 map干嘛?这个有些画蛇添足