workerman 不依赖 composer,官方推荐直接克隆 github 仓库;需手动引入 autoloader.php,启动脚本精简至10行内,注意端口、权限及防火墙配置。

Workerman 不需要 Composer 安装
Workerman 是纯 PHP 编写的常驻内存框架,composer install 不是必须步骤——它本身没有硬依赖 Composer,也不发布在 Packagist 上。官方推荐方式是直接下载源码或用 git clone,而非通过 Composer 加载。
如果你执行了 composer require workerman/workerman,大概率会失败或装错包(比如拉到非官方镜像、旧版 fork,甚至空包),因为官方未维护 Composer 包。目前唯一权威来源是 GitHub 仓库:https://github.com/walkor/Workerman。
- 用 Composer 强行安装,容易引入版本混乱、自动加载冲突或缺失
autoload.php入口 - Workerman 启动脚本(如
start.php)依赖的是自身目录结构和Worker::runAll(),不走 PSR-4 自动加载 - 若项目已用 Composer 管理其他组件,可把 Workerman 放进
vendor/手动目录,但需自行处理require路径,不推荐
用 git clone 搭建最小通信环境
搭一个能收发 TCP 请求的最小环境,5 分钟内可跑通,关键不是“装”,而是“启动+监听”。Workerman 的核心就是写好一个 start.php,然后用 PHP CLI 运行它。
实操建议:
- 执行
git clone https://github.com/walkor/Workerman.git到项目根目录(如./Workerman) - 新建
start.php,内容精简到 10 行以内:<?php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $tcp_worker = new Worker('tcp://0.0.0.0:1234'); $tcp_worker->onMessage = function($connection, $data) { $connection->send("Echo: $data"); }; Worker::runAll(); - 确保 PHP 版本 ≥ 7.1(Workerman 4.x 要求),且禁用
safe_mode,开启pcntl和posix扩展(Linux/macOS 必须;Windows 只支持开发调试,不可用于生产)
常见连接失败原因:端口、权限、防火墙
写完代码却连不上 1234 端口?90% 问题不在 Workerman 代码本身,而在运行环境。
- Linux 下非 root 用户不能监听 1024 以下端口,改用
tcp://0.0.0.0:2000或加sudo(不推荐生产环境 sudo 运行) - PHP 进程被 SELinux 或 AppArmor 限制(CentOS/RHEL 常见),临时关闭验证:
setenforce 0 - 云服务器(如阿里云、腾讯云)安全组默认屏蔽所有非 HTTP/HTTPS 端口,必须手动放行
1234(TCP 协议) - 本地测试用
telnet 127.0.0.1 1234验证,别只靠浏览器——浏览器只发 HTTP,而 Workerman 默认是裸 TCP
想用 Composer 管理?只能手动注册 autoload
如果团队强依赖 Composer 工作流(例如 Laravel 项目里嵌入 Workerman),可以妥协,但必须绕过 Packagist,走 path 类型本地仓库。
在 composer.json 中添加:
"repositories": [
{
"type": "package",
"package": {
"name": "workerman/workerman",
"version": "4.1.8",
"dist": {
"url": "https://github.com/walkor/Workerman/archive/v4.1.8.tar.gz",
"type": "tar"
}
}
}
],
"require": {
"workerman/workerman": "4.1.8"
}然后 composer update。但注意:
- 每次升级都要手动改
composer.json中的 version 和 url,无法composer update workerman/workerman自动拉新 - Workerman 的
Autoloader.php不符合 PSR-4,必须在入口文件中显式require vendor/workerman/workerman/Autoloader.php - 它的
Worker类没命名空间(全局类),跟 Composer 自动加载逻辑天然冲突,容易报Class 'Worker' not found
真正省事的做法,是接受 Workerman 的原始风格:不进 Composer,就放在项目同级目录,require 绝对路径,启动脚本保持干净。复杂点在于进程管理(重启、平滑 reload)、日志轮转、守护进程这些——但那是另一个层面的事了。










