前言
前段时间,不是刚搭建好本地开发环境,那怎么也得搞点事情啊,看了下Swoole开发文档,就先试试WebSocket弄一下即时通讯吧,那就安排一下聊天室,开搞……
Swoole是什么
Swoole 是一个 PHP 的 协程 高性能 网络通信引擎,使用 C/C++ 语言编写,提供了多种通信协议的网络服务器和客户端模块。可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。
从官方介绍中可以看到,Swoole
支持WebSocket服务
,我们就利用这个来快速开发一个简易的聊天室。
聊天室效果
首先进入到项目根目录下,执行命令php SwooleChat.php
开启WebSocket
服务,然后双击chat.html
文件在浏览器中打开,就进入了聊天界面了,就可以开始愉快的吹水了……
服务器端(SwooleChat.php)
从官方文档-WebSocket 服务器可以看到,PHP服务器端主要有onOpen
、 onMessage
和onClose
,这三个事件的作用如下:
- onOpen:监听WebSocket连接打开事件
- onMessage:监听WebSocket消息事件
- onClose:监听WebSocket连接关闭事件
建立MySQL数据表
这里我们主要新建一个表就行了,这里,我们是新建一个数据库名为chat
,然后再新建一个聊天用户表chat_user
,建表SQL语句如下
1 | CREATE TABLE `chat_user` ( |
onOpen监听WebSocket连接打开
新用户开启一个WebSocket连接,都会走onOpen
事件,我根据官方的例子简单封装一下,用户创建连接后,用户信息存入MySQL
数据库中,并且通知其他在线用户。对了,提醒一下,这里用到了MySQL
,如果没有安装的,请先安装相关扩展。
1 | /** |
onMessage监听WebSocket消息
客户端发送的消息,需要推送给聊天室内的其他人,并且告知其他用户,这条信息是谁什么时间发送的。
1 | /** |
onClose监听WebSocket连接关闭
当客户端连接关闭的时候,需要处理用户状态为离线,并且告知其他在线用户,该用户已下线离开聊天室。
1 | /** |
客户端(chat.html)
HTML界面
界面,为了简单快速,我用了Bootstrap,可以快速写简单的一个聊天室页面
1 | <head> |
JS交互
同样的,我们从实例中也看到,客户端的主要事件和服务器端是一样的,也就是,客户端建立ws
连接后,需要处理来自于服务器端推送的各种事件对应的消息,主要处理上下线消息通知以及普通聊天消息等;为了省事,这里用户名我直接随机获取了,千万别说我懒哈。
1 | <script> |
完整源码
为了方便,我肯定会把完整源码分享出来的,虽然上面说了一堆核心的代码,但是并凑起来运行还是挺费劲的,作为一个有良心的搬砖工人,我肯定会给大家那种只要环境没问题,就可以直接运行跑起来嗨的代码的,你可能要说了:BB is easy, Show me the code.
,好吧,我已经把源码上传到GitHub交友网站了,大家可以去上面查看即可。
服务器端源码:SwooleChat.php
客户端源码:chat.html
总结
这只是一个简单的聊天室,仅供学习参考和交流使用,如有任何问题或者不明白的,多可以留言与我沟通,共同学习和进步,谢谢。