Laravel+Swoole 完成一个简单的在线聊天室

前言

前几天一个朋友咨询我关于在线聊天的事情,所以我就顺手写了一个简单的在线聊天系统。
由于我是使用了最新版的Laravel,所以需要在PHP7.0以上的版本才可以搭建,具体的安装和使用可以参考GitHub。感兴趣的可以star或者fork

GitHub
在线体验

chat.giffile

WebSocket

网页版的在线聊天一般分为两种方式,轮询和全双工。以传统的HTTP形式来做,Server没办法主动的向Client发送消息,而像WebSocket这种全双工形式则不太一样,二者保持长连接,并且能让Server主动的推送消息到Client,这就大大节省了请求资源。
Swoole非常方便的以扩展的形式集成了这些高级功能。

思路

建立用户,创建房间这种非常简单的业务逻辑就不再赘述,这里主要讲一下聊天的实现。
由于SwooleWebSocket都是单独的建立一个PHP进程,所以在数据共享上面我使用了Redis,使用SET来完成每个房间成员的统计,使用HASH来完成每个Connect ID对于房间号的绑定。关于Redis每种类型的使用以及实现原理可以参考我之前写的这篇文章:聊一聊Redis的数据结构
Swoole我以command的形式来处理逻辑,主要参考了这篇文章

文章首发地址:我的博客

参考

Laravel如何优雅的使用Swoole

Nine