PHP中真正能实现WebSocket通信的成熟方案是Workerman、Swoole和Ratchet:Workerman纯PHP无需扩展,Swoole需安装扩展性能更强,Ratchet基于ReactPHP适合已有React生态项目。
Webman 不是 PHP 框架,它不支持 PHP。你无法用 PHP 调用
实现 WebSocket 通信。
为什么 Webman 和 PHP 不能一起用?
所有公开资料中提到的 “Webman” 实际指向三个互不兼容的项目:
Java 生态的
(Maven 依赖、
注解、
类)
C 语言写的轻量服务器(
、
、
)
名字撞车的 GitHub 项目
(Java + Maven,
类)
PHP 官方扩展列表、Composer 包索引、PECL 扩展库中均无名为
的合法 PHP 组件。尝试
或
必然报
或
。
PHP 里真正能跑 WebSocket 的方案有哪些?
别被名字带偏,PHP 做实时聊天只认这几个成熟路径:
立即学习
“
PHP免费学习笔记(深入)
”;
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
:纯 PHP 实现,无需编译扩展,
/
回调直白,适合快速验证逻辑
:需安装
扩展,支持协程和
类,性能更高但调试门槛略高
:基于 ReactPHP,依赖
,适合已用 React 生态的项目
三者都要求 PHP 启用
扩展(Windows 下确认
已启用,Linux 下检查
),否则
直接 fatal error。
Workerman 启动 WebSocket 服务最简代码长什么样?
这是当前(2026 年)生产环境验证过的最小可运行片段,保存为
即可启动:
运行命令:
;前端用
连接。关键点是:所有连接都挂在
上,不是全局数组也不是静态变量——这是 Workerman 的连接管理机制,改用其他方式存连接 ID 容易漏广播或内存泄漏。
名字混淆是最大陷阱。看到 “Webman WebSocket” 就该立刻查 composer.json 或 pom.xml 确认语言栈,PHP 项目里混进 Java/C 的配置项,连
都加载失败。
Webmancd.salt.webman@OverrideWebsocketSession#include struct webman *libevwebman-wsWebSocketHandlerwebmancomposer require webman/webmanuse Webman\WebSocketClass not foundInvalid argument supplied for foreach()WorkermanonMessageonConnectSwooleswooleWebSocket\ServerRatchetreact/event-loopsocketsphp_sockets.dllextension=socketssocket_create()start.phpcount = 1;
$ws->onMessage = function ($connection, $data) {
// 注意:这里不能直接 echo,要 send 给客户端
foreach ($connection->worker->connections as $client) {
$client->send($data);
}
};
Worker::runAll();
php start.php start -dnew WebSocket('ws://localhost:2346')$connection->worker->connectionsautoload.php