实现功能:
- 登录系统
- 用户上线
- 实现一对一聊天
- 离线
- 演示
关键字介绍
- sid: 用户登录时将创建一个sid,该sid由用户名+随机数组成,当用户再次访问系统的时候会带着sid请求,用来做用户认证。(类似token)
- wsid: websocket客户端和服务端交互时会产生一个链接id,该系统会称这个id为wsid,并且用户上线的时候,会将这个链接id(wsid)和用户表中的wsid字段绑定。
登录系统
用户登录时,后台会通过前端提交的用户名和密码去认证该用户是否合法,如果合法,会返回sid+用户信息(用户名,昵称,用户id);
前端检测用户登录成功会将sid和用户信息存储到localstorage,并且跳转到用户列表页。
用户上线
- 当跳转到用户列表页后,第一件事情就是检测用户是否登录;
- 前端读取localstorage中存储的sid和用户名(如果没有,说明没有登录,跳转回登录页)发送到websocket服务端;
- 如果sid和用户名没有查找到相应匹配的用户信息,则说明用户未登录,返回给前端用户未登录信息,前端跳转至登录;
- 如果如上所述匹配成功,则将wsid和该用户绑定,并且返回给websocket客户端用户上线信息。
实现一对一聊天:
- 前端将登录用户的id+sid和好友id发送至websocket服务端,websocket服务端首先认证该用户是否合法在线用户;
- 如果用户认证不合法,则返回给websocket客户端,跳转至登录页;
- 如果用户认证合法,继续认证好友是否存在,若不存在则返回给websocket客户端用户不存在;
- 若好友存在,则可以发送信息;
- 当用户信息发送后,websocket服务端首先将信息存入到聊天记录表,聊天记录表(发送者,接收者,发送时间等字段);
- 如果好友绑定了wsid,则根据wsid推送给好友消息,如果没有绑定wsid,好友登录后也能查到相关离线聊天记录;
- 推送给好友聊天记录后,还需要将该聊天记录推送给自己。
离线:
根据离线的wsid,去查找对应的用户,将该用户的状态修改为离线,用户的wsid字段修改为0(即解绑),并且给所有在线用户发送该用户离线消息!
演示:
http://chart.uminicmf.com/page/
文档结束!
不懂可以加qq:1186969412 qq群:536633782
官网:http://uminicmf.com/
php在线面试题集:http://cainiaophp.com/
php面试讨论群:536633782