swoole 超简单 构建聊天室.资辞 群聊,组聊,单聊.

今天来作一个简单的聊天室,支持换房间,支持私信的. 写的代码有点渣,里面有不少不是很好的地方.毕竟我只是一个野生程序猿.

环境:
 php7.0
 apache 2.4
 swoole 1.9
 redis  4.0

bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...php

样子差很少是这个样子的:mysql

clipboard.png

我不想把代码发到个人服务器上,由于这个项目过小了.很垃圾.并且怕被攻击.
这里有录的一个演示视频(bilibili没有广告的).大家能够看一下,
大家也能够直接到github 把源码下载下来, 绝对有用.很差用找我.
把个人ip地址 192.168.1.109改为大家的ip就能用了.
我这里作了3个房间,首次登陆是在公共聊天室.能够随意切换到文人雅士专区,固然了也能够选择去死肥宅那一栏.
流程差很少是这样:git

  1. 登陆一个聊天室github

    1.1 后台触发open 事件. 此时判断是初次登陆仍是已注册以后刷新的,若是是注册刷新的话 将session中保存的用户
       信息发送给swoole服务器 并进行注册.而后返回注册成功或者失败,还有当前在线的用户列表
       若是是新用户,那么就直接将当前所在的聊天室的全部用户列表发送给客户端.二者都会插入新数据进redis数据库

    1.2 此时若是不注册 那么就没法发消息给当前分组,若是注册的话 先去网站后台验证session 验证码 并将使用的用户名web

    和时间戳和盐进行sha256信息摘要.而后向swooleWebSocket服务器请求注册.此时服务器会判断 若是用户信息的前6个字母
       是tokenR 而且当前未注册 若是token 验证成功那么就插入redis数据库,并通知客户注册成功,再通知客户所在组的全部用户
       添加用户用户(就是当前在线那一栏)
       代码差很少是这样的

    clipboard.png

  2. 此时已经登陆成功了,能够随意切换分组了.每次切换分组用户的编号都会重设.由于swoole规定就是这样,只要断开链接,
    以后的链接就是一个新链接,好比以前的socket号 是1 那么断开后下一个就是2.可是根据session 判断是能够保存住用户名,
    而使刷新以后仍是以前的用户名.(可是这)
    2.1redis

    公共聊天室的人聊天只有公共聊天室人看见,文人雅士专区只有文人雅士看见.

    2.2sql

    私信单聊只有对方能够看见,别人都看不见 这个主要就是将发送的信息前6个字母写成sendTo
       代码流程差很少是这样的.

    clipboard.png

哎呀我发现流程好少啊.仍是看后台吧.

后台主要就是我新建的一个叫WebS的类.这个类继承了SwooleWebsocketServer
并新增一些逻辑方法
主要以下:数据库

1. checkRegisterName() 检查用户名是否能够用   
   原型 checkRegisterName(\Redis  $redis, string  $user_name, \buff\string  $reload) : boolean
2. sendToPerson()  发送消息给单个用户
   原型 sendToPerson(integer  $fd, string  $mes, integer  $type, string  $sendTo = "", string  $user_name = "", \Redis  $redis = null)
3. sendToGroup() 发送消息给单个组
   原型 sendToGroup(int $frameFd, \Redis $redis, string $user_name, int $type, string $mes = "", string $group = "public")
 4. getOnlineUsersList() 获取当前全部已注册的用户列表  原型我就不写了,下面贴github.源码注释好了
 5. checkToken() 检查token 是否正确
 6. judgeMesEventType() 判断用户发送的消息 分析他想要干吗

没了. 是否是超简单. 有了swoole 这样简单.并且这个是国人开发的! 大家去swoole官网能够学习,文档不少,并且swoole功能能强大,
我只看了一点点websocket 那一章的,其余的基本没看,由于看不懂! 还有redis 普通用法很简单.我就是上慕课网> 看了20分钟这个视频.>http://www.imooc.com/video/14315 我这里就是把redis 看成mysql来用的.
而后只用了hash 这一个类型,用了两三个函数,其余的都不会.什么加锁 只读之类的都没有弄
phpredis扩展百度安装.
这个是一次性完成的,从昨天夜里开始作,作到早上,没有检查,我就看能正常运行,控制台没有异常信息 就发上来了.
要是大家遇到问题,我能解决的必定解决. 另外 请你们支持国产优秀做品 swoole!http://swoole.com
swoole 官方qq交流群 193772828 我在里面属于菜逼那种.大家学习swoole 有问题能够去群里交流.
再说一遍 视频地址(7分钟 演示)apache

bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...服务器

相关文章
相关标签/搜索