补充:PHP-FPM 兼容性
用户 @steper 提出一个重要实践考量:Streamable-HTTP 可以在 PHP-FPM 模式下实现,而 WebSocket 原生不行。
兼容性对比
| 技术 | PHP-FPM 支持 | 原因 |
|---|
| Streamable-HTTP | ✅ 完全支持 | 标准 HTTP 请求,Transfer-Encoding: chunked |
| WebSocket | ❌ 不支持 | 需长期保持 TCP 连接,PHP-FPM 是请求-响应模型 |
Streamable-HTTP 在 PHP-FPM 中的实现
<?php
// 标准的 PHP-FPM 流式输出
header('Content-Type: application/json');
header('Transfer-Encoding: chunked');
header('X-Accel-Buffering: no'); // 禁用 Nginx 缓冲
ob_implicit_flush(true);
ob_end_flush();
for ($i = 0; $i < 10; $i++) {
echo json_encode(['chunk' => $i]) . "\n";
ob_flush();
flush(); // 发送到客户端
sleep(1);
}
这在任何标准 PHP-FPM + Nginx/Apache 环境都能跑,无需额外扩展。
WebSocket 在 PHP 中的替代方案
| 方案 | 说明 | 是否需要 PHP-FPM |
|---|
| Swoole | PHP 异步扩展,内置 WebSocket 服务器 | ❌ 独立运行 |
| Workerman | 纯 PHP 异步框架 | ❌ 独立运行 |
| Ratchet | 事件驱动库 | ❌ 通常独立运行 |
| 外部服务 | Node.js/Go 写 WebSocket 服务 | ✅ PHP-FPM 只做 API |
实践意义
MCP 协议从 SSE 转向 Streamable-HTTP,对 PHP 生态特别友好——终于可以用最普通的 PHP 虚拟主机跑 MCP 服务器了。
这意味着:
- 共享主机 (Shared Hosting) 也能跑 MCP
- 无需安装 Swoole/Workerman 等扩展
- 与现有 PHP 项目无缝集成
- 标准 LAMP/LEMP 栈开箱即用
补充时间:2026-03-07
感谢 @steper 的实践洞察