资讯专栏INFORMATION COLUMN

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

Towers / 1379人阅读

摘要:今天来做一个简单的聊天室支持换房间支持私信的写的代码有点渣里面有很多不是很好的地方毕竟我只是一个野生程序猿环境地址样子差不多是这个样子的我不想把代码发到我的服务器上因为这个项目太小了很垃圾而且怕被攻击这里有录的一个演示视频没有广告的你们可以

今天来做一个简单的聊天室,支持换房间,支持私信的. 写的代码有点渣,里面有很多不是很好的地方.毕竟我只是一个野生程序猿.
 环境:
 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, uffstring  $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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23299.html

相关文章

  • netty搭建web天室(3)单聊

    摘要:开始聊天发送聊天信息时消息,这样后端就知道是谁要发给谁,根据用户名去找到具体的线程去单独推送消息,实现单聊。前端待完善左侧聊天列表没有实现,每搜索一个在线用户,应该动态显示在左侧,点击该用户,动态显示右侧聊天窗口进行消息发送。 上节课讲了群聊,这次来说说单聊,单聊要比群聊复杂点,但是代码也不是很多,主要是前端显示比较麻烦点。 效果:showImg(https://segmentfaul...

    Lavender 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<