如果我们开发的系统要支持同帐號多设备同时登录的场景即需要像微信一样,在PC端登录的同时也可以使用同一个帐号登录移动端(iOS或Android),那么如何才能做到了?
解決方案的原理是比较简单的:既然C/S系统要求UserID作为用户标记必须是唯一的那么我们就引入一个称为“LoginID”的概念,对于同一个用户在不同類型的设备上就使用不同的LoginID,但是这些LoginID都指向同一个真正的UserID
同理在多设备登录场景中,框架中各个API(各个方法以及事件)的userID参数实际上都是LoginID在处理时都需要做类似的处理,这里就不一一列举了
在解决了多设备同时登录的问题后,还有一个常见的需求:类似QQ的PC和手机端同时在线时别人给我发一条消息,手机端和PC端都能接收到这样的功能是怎么实现的了?
该方法的第一个参数是接收鍺的UserID表示直接将聊天消息发送给对方(可能是经过服务器中转,或者是经P2P通道直接传送)
但是,在多设备登录场景中不能再直接发送了,而是必须要经过服务器中转通过调用下面的Send方法:
方法来获取各个设备类型对应的LoginID,然后服务端是什么在把该消息发送给每一個LoginID。如此手机端和PC端就都能收到这条聊天消息了。
传统实现用户登陆一般采用session记录鼡户登陆信息前后端分离后依然可以使用session来记录用户信息,不同的是传统形式的一次成功登陆请求后再点击其他页面时,session一直是存在嘚在一定时间内是有效的;而前后端分离的方式请求一次成功登陆后,再次发送新的请求则会产生新的session,为避免这个问题需要记录session的id號并在整个请求过程中都记录并传递这个id号,才能保证session的一致性
下面举例来说明具体使用方法(后端以php为例):
//$userid不为空说明为登陆状态