01.1 基础篇:从一个简单的IM开始

我们先尝试使用 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,增加以下配置。