关于MINA的问题

发布于 2021-11-14 19:09:09 字数 466 浏览 809 评论 3

服务器端利用MINA收发客户端发来的信息。

 当一个客户端发送登录指令,服务端成功回复之后,服务端用TreeMap<key,client>来保存客户端的信息,并把IoSession保存在client里。这样当回复客户端发来的心跳指令的时候,直接client.getIoSession()获得IoSession来回复。

最近这样出现一个问题,在我查看登陆客户端信息的时候,有时2个,有时好几个重复的现象。

client的信息都是从Map里通过key来获得,理论上是不应该出现重复现象的,但是他出现了。

这个问题有时候会出现,有时候会在服务端运行一段时间后出现,反正不确定。当出现这个问题的时候在向客户端发送指令的时候,就不会成功了,指令也会发送,但是客户端已经不回应了。

最近也是开始学MINA,对于它的机制,还不是很了解。是不是IoSession混乱导致的?望大哥大姐大妈大姨门帮帮小弟。

感激涕零。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

顾挽 2021-11-16 00:00:44

如果没有什么限制建议一个服务端只允许一个ip有一个连接,如果重复连接,断掉前次连接重新建立新连接。

这样维护连接最好。我现在就是这样做的。

冷默言语 2021-11-15 08:46:18

你的 key是每个用利登录一次就产生一个的吗,还是每个用户使用固定的如用户ID

如果是前者,那么就需要有timeout时间了,因为mina是nio的,也就是说当客户端没有信息时他是不会激活任何操作的,包括close

通常这个是客户端直接kill线程做成的,没有正常调用close

醉生梦死 2021-11-14 23:48:40

IoSession 已经表示一个会话了,还自己再弄一个 map干嘛?这个有些画蛇添足

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文