workerman可直接作为web服务器使用,无需apache或nginx;只需php 7.1+环境,创建worker实例监听http://0.0.0.0:端口,require autoload.php,onmessage中用$connection->send()返回规范http响应,运行php server.php start即可启动。

用 Worker 初始化 HTTP 服务实例
核心是创建一个 Worker 实例,并传入 http://0.0.0.0:端口 协议地址。Workerman 会自动识别协议并启用内置 HTTP 解析器。
注意点:
-
0.0.0.0表示监听所有网卡,生产环境若只希望本地访问,可改用127.0.0.1 - 端口号别选被占用的(如 80、443 需 root 权限;开发建议用 2345、8080 这类)
- 必须调用
require_once __DIR__.'/vendor/autoload.php',否则Worker类找不到
onMessage 回调里怎么响应请求?
HTTP 请求到达后,Workerman 触发 onMessage,参数是 $connection 和 $request(HttpRequest 对象)。你不能直接 echo,得用 $connection->send() 返回完整 HTTP 响应。
常见写法:
- 返回纯文本:
$connection->send("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello") - 返回 HTML(推荐):
$connection->send("HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<h1>Hi</h1>") - 想复用结构?可以手动拼响应头,但更稳妥的是用
HttpResponse类(需use Workerman\Protocols\Http\Response;)
为什么浏览器访问空白或报错?
最常踩的坑不是代码逻辑,而是启动方式和响应格式不对:
- 没加
\r\n\r\n分隔响应头与响应体 → 浏览器卡住、无内容 - 忘了设
Content-Type→ 中文乱码或被下载成文件 - 用
php server.php直接运行 → 缺少守护进程支持,关终端就退出;正确命令是php server.php start(带start参数才进 daemon 模式) - Linux 下提示
Permission denied绑定低端口 → 换高权限端口,或加sudo(不推荐开发时用)
想支持 HTTPS 或静态文件怎么办?
Workerman 原生支持,但配置稍有不同:
- HTTPS:协议前缀换成
ssl://,且必须传$context数组,包含local_cert和local_pk的绝对路径(相对路径会静默失败) - 静态文件:设置
$worker->documentRoot = '/path/to/public',再在onMessage里手动读文件 + 设置Content-Type和Content-Length;Workerman 不像 Apache 那样自动处理路由和 MIME 类型 - HTTP/2:必须走 SSL,且显式设
$worker->protocol = 'Http2',同时$worker->transport = 'ssl'
Worker、绑 onMessage、调 Worker::runAll()。其余都是围绕它补全边界情况——比如响应格式对不对、端口能不能 bind、证书路径写没写错。这些细节一旦漏掉,服务看似起来了,但浏览器就是打不开。











