美文网首页PHP高级技能php面试题
基于swoole开发聊天系统

基于swoole开发聊天系统

作者: AISpider | 来源:发表于2018-12-21 13:36 被阅读238次

实现功能:

  • 登录系统
  • 用户上线
  • 实现一对一聊天
  • 离线
  • 演示
关键字介绍
  • 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

相关文章

网友评论

    本文标题:基于swoole开发聊天系统

    本文链接:https://www.haomeiwen.com/subject/pwjbhqtx.html