Node.js调用PHP接口慢的本质是未限流导致的连接爆炸。应改用BullMQ等队列解耦,Node投递任务后立即返回,由独立PHP Worker消费;Worker须用CLI模式、禁用超时、由Supervisor管理,并确保错误处理与结果回传。
Node.js 调用 PHP 接口慢,本质是同步阻塞 + 连接爆炸
Node.js 本身非阻塞 I/O,但调用 PHP(比如通过 child_process.exec 或 HTTP 请求)时,若不做控制,高并发下会瞬间创建大量子进程或 TCP 连接,PHP 端(尤其用 Apache + mod_php 或短生命周期 CGI)来不及响应,排队、超时、内存溢出全来了。
这不是 Node.js 慢,是“没限流的混合架构”在自爆。
- HTTP 方式调用:PHP 接口没加连接池,
axios或node-fetch默认每请求新建 socket,复用率低 - 子进程方式(
spawn/exec):PHP 脚本启动开销大,maxBuffer不设易卡死,stderr 未监听会阻塞子进程退出 - PHP 端无状态、无缓存、每次重连数据库——Node 并发一上来,它先扛不住
用 BullMQ 或 Bee-Queue 做中间队列,把“调用”变成“投递”
核心思路:Node.js 不直接等 PHP 执行完,而是把任务写进 Redis 队列,由独立的 PHP Worker 进程消费。Node 只负责快速返回任务 ID,后续轮询或 WebSocket 推送结果。
选 BullMQ(基于 Redis Streams)比旧版 Bull 更稳,支持重试、优先级、延迟任务:
立即学习“PHP免费学习笔记(深入)”;