← 返回全部文章
·约 9 分钟PPT

Ratchet

配套媒体

本页对应的 PPT 与演示视频

ratchet-recommend.mp4
PPT
ratchet-recommend.pptx浏览器不能直接打开 PPT,下载后用 PowerPoint / WPS / Keynote 查看
下载没反应?点这里复制直链

侧边栏预览窗口(Electron webview)会拦截下载,把下面的链接复制到 Chrome / Edge 地址栏打开即可保存。

PPT../../ratchet-recommend.pptx
视频../../ratchet-recommend.mp4
本文目录
  1. 🚀 什么是 Ratchet?
  2. ✨ 核心功能一览
  3. 🛠️ 快速上手:5 分钟跑通 WebSocket 服务
  4. 安装
  5. 最小聊天服务示例
  6. 📊 与竞品对比
  7. 💡 适用场景
  8. 场景 1:实时聊天室
  9. 场景 2:实时数据推送(股票/监控)
  10. 场景 3:多房间/多主题订阅
  11. 用户群体总结
  12. 💰 开源协议
  13. 🎯 总结

🔥 Ratchet:PHP WebSocket 异步服务库,6.4k Stars 的经典之作

无需依赖额外 PHP 扩展,兼容 PHP 5.4 到 PHP 8+,用简单接口构建实时双向通信应用。

封面图


🚀 什么是 Ratchet?

Ratchet 是一个用于异步服务 WebSocket 的 PHP 库。它让你通过简单易用的接口构建实时应用,且无需修改代码即可通过组合不同组件复用应用。

项目支持 PHP 5.4 到 PHP 8+ 版本,不依赖额外 PHP 扩展,兼容多平台。无论是聊天室、实时通知、多人协作编辑,还是在线游戏,Ratchet 都能提供稳定可靠的 WebSocket 服务能力。

核心定位:零扩展依赖的 PHP WebSocket 解决方案,组合式架构让应用复用零成本

GitHub stars GitHub forks


✨ 核心功能一览

功能对比表


🛠️ 快速上手:5 分钟跑通 WebSocket 服务

安装

# 通过 Composer 安装(推荐方式)
composer require cboden/ratchet:^0.4.4

版本说明:最新稳定版为 v0.4.4(2021年12月发布),支持 PHP 8+。项目目前正在复苏维护中,详见 ticket #1054。

最小聊天服务示例

服务端(chat.php):

<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

require __DIR__ . '/vendor/autoload.php';

/**
 * 聊天消息广播组件
 * 将收到的消息发送给所有连接的客户端(发送者除外)
 */
class MyChat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "新连接: {$conn->resourceId}\n";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($from != $client) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "连接关闭: {$conn->resourceId}\n";
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        echo "错误: {$e->getMessage()}\n";
        $conn->close();
    }
}

// 在 8080 端口启动 WebSocket 服务
$app = new Ratchet\App('localhost', 8080);
$app->route('/chat', new MyChat, ['*']);
$app->route('/echo', new Ratchet\Server\EchoServer, ['*']);
$app->run();

运行服务:

php chat.php

浏览器端(JavaScript):

// 连接 WebSocket 服务
var conn = new WebSocket('ws://localhost:8080/echo');

conn.onopen = function(e) {
    console.log('连接成功!');
    conn.send('Hello WebSocket!');
};

conn.onmessage = function(e) {
    console.log('收到消息:', e.data);
};

conn.onclose = function(e) {
    console.log('连接关闭');
};

注意:生产环境建议使用 80 或 443 端口(避免被代理/防火墙拦截),需要 root 权限,可通过反向代理实现


📊 与竞品对比

竞品对比表


💡 适用场景

场景 1:实时聊天室

功能说明:Ratchet 最核心的应用场景。通过 MessageComponentInterface 接口,只需实现 4 个方法(onOpen、onMessage、onClose、onError),即可构建完整的多人聊天系统。

输入要求:客户端通过 WebSocket 发送文本消息

输出效果:所有其他在线用户实时收到消息

适用场景:

  • 在线客服系统
  • 多人协作白板
  • 实时评论区

场景 2:实时数据推送(股票/监控)

功能说明:服务端主动推送数据给客户端,无需客户端轮询。结合 ReactPHP 的事件循环,可实现定时推送或事件触发推送。

输入要求:服务端数据源(数据库、API、消息队列)

输出效果:客户端实时接收数据更新通知

适用场景:

  • 股票行情推送
  • 服务器监控告警
  • 物联网设备状态更新

场景 3:多房间/多主题订阅

功能说明:Ratchet 支持路由($app->route()),可以为不同路径绑定不同组件,实现房间隔离或主题订阅。

输入要求:客户端连接时指定房间/主题路径(如 ws://localhost:8080/room/123)

输出效果:消息仅在同房间/主题内广播

适用场景:

  • 多人在线游戏
  • 直播弹幕系统
  • 在线教育白板

用户群体总结

  • ✅ PHP 开发者:已有 PHP 技术栈,快速添加 WebSocket 能力(推荐指数:⭐⭐⭐⭐⭐)
  • ✅ 实时通信需求者:聊天、推送、协同类应用
  • ✅ 轻量级应用:不想引入 Node.js 技术栈的项目
  • ❌ 超高性能需求:百万级并发建议使用 Go/Node.js 方案
  • ❌ 需要 MQTT 协议:Ratchet 仅支持 WebSocket,如需 MQTT 请选其他方案

💰 开源协议

开源协议: MIT

💡 完全免费:MIT 协议,可商用,无限制!


🎯 总结

Ratchet 是 PHP 生态中最成熟的 WebSocket 库之一,6.4k Stars 和 792 Forks 证明了它的稳定性和社区认可度。

推荐指数: ⭐⭐⭐⭐

适合人群: 已有 PHP 技术栈的开发者、需要快速搭建实时通信能力的团队

立即体验: Ratchet 官网

GitHub 仓库: ratchetphp/Ratchet

示例项目: Ratchet Examples


数据截至 2026-05-23,最新信息请以官网为准。