今天来做一个简单的聊天室,支持换房间,支持私信的. 写的代码有点渣,里面有很多不是很好的地方.毕竟我只是一个野生程序猿.
环境:
php7.0
apache 2.4
swoole 1.9
redis 4.0
bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...
样子差不多是这个样子的:
我不想把代码发到我的服务器上,因为这个项目太小了.很垃圾.而且怕被攻击.
这里有录的一个演示视频(bilibili没有广告的).你们可以看一下,
你们也可以直接到github 把源码下载下来, 绝对有用.不好用找我.
把我的ip地址 192.168.1.109改成你们的ip就能用了.
我这里做了3个房间,首次登录是在公共聊天室.可以随意切换到文人雅士专区,当然了也可以选择去死肥宅那一栏.
流程差不多是这样:
-
登录一个聊天室
1.1 后台触发open 事件. 此时判断是初次登录还是已注册之后刷新的,如果是注册刷新的话 将session中保存的用户 信息发送给swoole服务器 并进行注册.然后返回注册成功或者失败,还有当前在线的用户列表 如果是新用户,那么就直接将当前所在的聊天室的所有用户列表发送给客户端.两者都会插入新数据进redis数据库
1.2 此时如果不注册 那么就无法发消息给当前分组,如果注册的话 先去网站后台验证session 验证码 并将使用的用户名
和时间戳和盐进行sha256信息摘要.然后向swooleWebSocket服务器请求注册.此时服务器会判断 如果用户信息的前6个字母 是tokenR 并且当前未注册 如果token 验证成功那么就插入redis数据库,并通知客户注册成功,再通知客户所在组的所有用户 添加用户用户(就是当前在线那一栏) 代码差不多是这样的
-
此时已经登录成功了,可以随意切换分组了.每次切换分组用户的编号都会重设.因为swoole规定就是这样,只要断开连接,
之后的连接就是一个新连接,比如之前的socket号 是1 那么断开后下一个就是2.但是根据session 判断是可以保存住用户名,
而使刷新之后还是之前的用户名.(但是这)
2.1公共聊天室的人聊天只有公共聊天室人看见,文人雅士专区只有文人雅士看见.
2.2
私信单聊只有对方可以看见,别人都看不见 这个主要就是将发送的信息前6个字母写成sendTo 代码流程差不多是这样的.
哎呀我发现流程好少啊.还是看后台吧.
后台主要就是我新建的一个叫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分钟 演示)
bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。