我们先尝试使用 WebSocket 服务实现一个简单的IM服务。
0. 开发环境
- 操作系统:CentOS Linux release 7.9.2009 (Core)
- PHP:8.1.21
- Swoole:4.8.7
- phpredis:release/5.3.3
- Hyperf:3.0
1. 需求整理
- 有用户登录时,给所有在线的用户推送系统消息,消息格式为 = 系统消息:用户 {username} 上线;
- 用户发送消息时,将消息推送给所有用户,消息格式为 = {username}:{message};
- 有用户登出时,给所有在线的用户推送系统消息,消息格式为 = 系统消息:用户 {username} 下线;
- 当同一个用户同时连接两次时,最早登录的连接将被踢出。
2. 安装组件
Hyperf
提供了对 WebSocket Server
的封装,可基于 hyperf/websocket-server
组件快速搭建一个 WebSocket
应用。
composer require hyperf/websocket-server
再安装一个日志组件,用于记录用户的相关操作。
composer require hyperf/logger
3. 配置服务
在项目中添加一个 WebSocket
服务,修改 config/autoload/server.php
,增加以下配置。