Javascript NodeJS集群问题
StackOverflow的人们好 我的问题如下: 我正在尝试使用Node的Javascript NodeJS集群问题,javascript,node.js,typescript,node-cluster,Javascript,Node.js,Typescript,Node Cluster,StackOverflow的人们好 我的问题如下: 我正在尝试使用Node的cluster工具对express.js API进行集群化 我的基本文件相关结构(是的,我称之为Skynet…): Server.ts从const skynetAPI=Express()创建一个快速侦听器不在SkynetCore.ts中 这将传递给该函数: 导出函数F_ServerListener(express:any,globalloger:any):void 我得到了另一个功能,它应该在第一个功能的基础上管理/创
cluster
工具对express.js API进行集群化
我的基本文件相关结构(是的,我称之为Skynet…):
Server.ts
从const skynetAPI=Express()创建一个快速侦听器代码>不在SkynetCore.ts中
这将传递给该函数: 导出函数F_ServerListener(express:any,globalloger:any):void 我得到了另一个功能,它应该在第一个功能的基础上管理/创建集群:
导出函数F_ClusterServerListener(express:any,globalloger:any):void
SkynetCore.ts中的主方法F\u Main
调用F\u ClusterServerListener(…)
因此,确切的问题是,F_ClusterServerListener
应该只使用F_ServerListener
函数,但它会重新启动整个应用程序。它只应该“重新启动”F_ServerListener,但它会重新启动所有内容
我怎样才能阻止它呢
SkynetCore.ts
/**
*文件:src/SkynetCore.ts
*描述:主文件
*作者:奥利弗·卡格
*/
//启用dotenv
require('dotenv').config()
//快车
const express=require('express');
const skynetApi=express();
//信号记录器
常量信号=要求(“信号”);
常数记录器=signale.scope('Skynet'))
//启动
从“/Startup”导入{F_EnableMiddleware};
//从“/YargParser”导入{F_GetYargs}--不会花时间在自动取款机上的
从“/Server”导入{F_ClusterServerListener};
/**
*@description主方法
*@作者奥利弗·卡格
*/
异步函数F_Main():Promise{
F_EnableMiddleware(skynetApi、记录器);
F_ClusterServerListener(skynetApi,记录器);
}
//主函数调用
F_Main()
.catch(e=>logger.fatal(新错误(e));
Server.ts
/**
*文件:src/Server.ts
*描述:服务器文件
*作者:奥利弗·卡格
*/
/**
*@description创建Express服务器/侦听器
*@作者奥利弗·卡格
*@param express实例
*@param globalloger信号记录器实例
*/
导出函数F_ServerListener(express:any,globalloger:any):void{
const logger=globalloger.scope('Skynet','Server');
//创建服务器
const skynetServer=express.listen(process.env.PORT,process.env.HOST,()=>{
logger.success(`Skynet实例在:${process.env.HOST}:${process.env.PORT}`上可用);
}).on('error',(err:any)=>{
logger.fatal(新错误(err));
});
}
常量集群=需要(“集群”);
常数os=要求(“os”);
导出函数F_ClusterServerListener(express:any,globalloger:any):void{
const logger=globalloger.scope('Skynet','Cluster Master');
常量CPU=os.CPUS();
if(cluster.isMaster){
forEach(函数(){
cluster.fork()
});
cluster.on(“侦听”,函数(worker:any){
logger.start(`Cluster${worker.process.pid}已连接`);
});
cluster.on(“断开”),功能(工作:任何){
logger.stop(`Cluster${worker.process.pid}已断开连接`);
});
cluster.on(“退出”,函数(worker:any){
logger.error(`Cluster${worker.process.pid}dead`);
//确保在旧集群死亡时启动新集群
cluster.fork();
});
}否则{
F_服务器侦听器(express、GlobalLoger);
}
}
GitHub上提供的源代码:试试pm2,
+ src
- SkynetCore.ts
- Server.ts
- Startup.ts