gpt4 book ai didi

node.js - pm2 无法 fork 包含原始集群代码的 nodejs

转载 作者:行者123 更新时间:2023-12-03 12:19:14 25 4
gpt4 key购买 nike

我的应用程序是一个在内部使用原始 nodejs 集群代码,并由 Node 运行的 ./dist/main.js 很好但是当我使用 pm2 start ./dist/main.js 时出错了

//my code

import cluster from 'cluster'
import http from 'http'

if(cluster.isMaster){
(async()=>{
const master = await (await import('./master'))
async function onMsg(pid:number,type?:string,num?:number,data?:{db:any,apiName:any,args:Array<any>}){
console.log(`master receiving message from cluster ${pid}`)
try{
let result = await master.publishMission(type,data)
// console.log(`${type} finish mission and send back to koa cluster ${pid}`)
cluster.workers[pid].send({num:num,status:true,data:result})
}catch(err){
cluster.workers[pid].send({num:num,err})
}
}
//cluster nums
for(let i=0;i<1;i++){
cluster.fork()
}
cluster.on('message',(worker,msg)=>{
onMsg(worker.id,...msg)
})
cluster.on('exit', (worker, code, signal) => {
console.log('worker %d died (%s). restarting...',worker.process.pid, signal || code);
cluster.fork();
});
})()
}else{
(async()=>{
const app = await (await import('./app')).app
try{
http.createServer(app).listen(5000)`enter code here`
console.log("fork new koa server",process.pid)
}catch(err){
console.log(err)
}
})()
}

//错误日志TypeError:发现不可调用的@@iterator在 EventEmitter。 (C:\Users\yany\project\Jmrh_Warehouse\src\main.ts:22:13)在 EventEmitter.emit(events.js:315:20)在 worker 。 (内部/集群/master.js:174:13)在 Worker.emit (events.js:315:20)在 ChildProcess。 (内部/集群/worker.js:32:12)在 ChildProcess.emit(events.js:315:20)在发出(内部/child_process.js:903:12)在 processTicksAndRejections (internal/process/task_queues.js:81:21)TypeError:发现不可调用的@@iterator在 EventEmitter。 (C:\Users\yany\project\Jmrh_Warehouse\src\main.ts:22:13)在 EventEmitter.emit(events.js:315:20)在 worker 。 (内部/集群/master.js:174:13)在 Worker.emit (events.js:315:20)在 ChildProcess。 (内部/集群/worker.js:32:12)在 ChildProcess.emit(events.js:315:20)在发出(内部/child_process.js:903:12)在 processTicksAndRejections (internal/process/task_queues.js:81:21)

最佳答案

pm2 在内部实现集群。

所以端口共享可能有问题。

其中:dist/main.js

(async()=>{
const app = await (await import('./app')).app
try{
http.createServer(app).listen(5000)`enter code here`
console.log("fork new koa server",process.pid)
}catch(err){
console.log(err)
}
})()

pm2 start dist/main.js -i max 可能有效。 -i 以集群模式启动 pm2。

https://pm2.keymetrics.io/docs/usage/cluster-mode/

关于node.js - pm2 无法 fork 包含原始集群代码的 nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64799825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com