日期:2014-05-18  浏览次数:20729 次

各种大神请进
这是一个比较大的问题:
   mina框架是一个为网络通信提供的开源框架, 也就是对java nio的封装.
想问下,如何实现不同类型的客户端互挤下线?
比如我用浏览器作为一种客户端登陆账号A,再用android手机登录账户A的时候,会把浏览器这边挤下线
   之前一直在做openfire开发, openfire也是基于mina写成的服务器, 它本身有强制客户端离线的功能,但是发现不同类型的客户端(比如浏览器跟手机app)却不能挤掉线

------解决方案--------------------
没有挤下线?
也就是说,不同类型的客户端,同一个用户开了多个 session。
可以这样,对于同一个类型的终端,可以共享 session,不同类型的,原有 session 注销!

------解决方案--------------------
每个用户登录的时候 ,把他的session以用户名为key存到map中,若果有账户登录 ,就去检查MAP中是否已经有了这个用户为KEY的值 ,若果有了说明已经重复登录了,取到这个session推送消息告诉这个用户已经重复登录了 ,之后掐断这个session连接。把新登陆的session在存到map中。
------解决方案--------------------
你是说,同一用户,同一类型的客户端,没有共享同一个 session,而是各自启用一个新的 session?
------解决方案--------------------
MINA是对NIO封装的。你的需求需要自己控制下。

对于同样的用户,每次判断,如果存在session中,过期当前的这个,使用新的
------解决方案--------------------
那你用数据库判断。比如你可以置一个标志位,记录是否登录。