美文网首页
swoole聊天室练手(1)

swoole聊天室练手(1)

作者: wanggang999 | 来源:发表于2022-08-31 13:16 被阅读0次

    swoole聊天室练手(1)

    打算好好学习一下swoole的websocket的使用。
    写个系列demo,从简单到复杂,一步一步来。
    代码参考了 https://github.com/OMGZui/swoole-demo

    首先构建需求

    1、写一个html页面,做好布局,假定两个使用者,一个是管理员,一个是消费者。
    2、根据请求传来的id,确定当前用户,假定管理员id=1,消费者id=2
    3、无论谁说话,把话传到服务器,然后服务器显示在另一个人的屏幕上,通过服务器推送。

    需求1 v1.0

    1、写一个html静态页面,带样式,带js函数可以把用户输入的话显示在对话列表。
    测试网址:http://127.0.0.1/index.html

    需求2 v2.0

    2、满足需求1的前提上,带上html的js,和服务端的接受websocket的文件。
    3、要求是,任意一个前端页面上线,则服务器后台打印“有人上线了”。
    测试网址:http://127.0.0.1/index.html

    需求3 v3.0

    4、任意一个前端页面上线,则服务器后台打印“有人上线了,用户id,用户名称”。
    5、如果前端页面关闭,就是离线了,则服务器后台打印有人离线。
    方法:
    客户端首页用php取代html,这样可以填写用户id。
    php代码接受请求参数id,代表了用户id。
    用数组代替查数据库,实现功能。
    测试网址
    http://127.0.0.1/index.php?id=1
    http://127.0.0.1/index.php?id=2

    具体流程:
    (1)我们在服务器的 shell 执行 php src/WebSocket/run.php,shell被同步阻塞。
    (2)浏览器用 http 协议请求首页,参数带了用户id
    (3)服务器先确认用户是否存在,然后返回首页。
    (4)在浏览器这里,var websocket = new WebSocket(wsServer); 这句话被执行。
    (5)浏览器用 ws 协议请求与服务器长连接,服务器接受了,令人喜悦的 websocket 长连接开始。
    (6)双方都连接上后,服务端先执行 WebSocketServer 类 的 open回调方法
    (7)客户端因为open成功,执行回调,websocket.send("my_id|{$user_id}"); 被执行。
    (8)服务端执行 WebSocketServer 类 的 message 回调方法
    (9)服务端检查是否特定开头,来判定用户端到底想做什么,my_id开头表示用户自我介绍身份。
    (10)查用户id是否存在,如果存在,保存到swoole_table, 且向用户推送特定格式的消息。欢迎您,某某某。
    (11)客户端的 onmessage 执行,显示在对话框中,欢迎您,某某某。
    (12)假设用户离开,关闭浏览器的窗口,则服务端的close回调被执行。用户信息从swoole_table中删除

    需求4.0

    6、需要能正常聊天。
    7、如果某人上线,他自己看到 欢迎您,某某某,其他人看到,某某某 上线了。
    8、如果某人下线。其他人看到,某某某 下线了。

    相关文章

      网友评论

          本文标题:swoole聊天室练手(1)

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