Node.js用cluster模块启动多个进程后,React前端怎么连?
我用 Node.js 的 cluster 模块起了多个工作进程,但前端 React 应用发请求时老是连不上,或者偶尔 502。是不是端口没配对?我主进程监听的是 3001,前端代码里写死了这个端口:
useEffect(() => {
fetch('http://localhost:3001/api/data')
.then(res => res.json())
.then(data => setData(data));
}, []);
但 cluster 启动后,每个 worker 都在同一个端口监听,理论上应该没问题啊?是我理解错了还是哪里漏了配置?
第一,worker 进程挂了没重启。cluster 不会自动帮你重启挂掉的 worker,得自己监听 exit 事件。
第二,CORS 没配,浏览器直接拦了。
第三,代码报错导致 worker 频繁崩溃。
给你一个完整的示例,直接改一下就行:
前端代码不用改,
http://localhost:3001是对的。cluster 模式下所有 worker 共享端口是内核级别的负载均衡,对前端透明。再检查几个点:
确保装了 cors 包,
npm install cors。看下控制台有没有 worker 频繁重启的日志,有的话就是代码里有 bug 导致崩溃。
如果用了 nginx 反向代理,记得检查 upstream 配置,不过你本地开发应该没这个。
调试的时候可以先把 worker 数量改成 1,确定没问题再开多进程。