问题描述
你好 StackOverflow 的人们,
我的问题如下:
我正在尝试使用 Node 的 cluster
工具对 express.js API 进行集群化。
我的基本文件相关结构(是的,我称之为天网...):
+ src
- SkynetCore.ts
- Server.ts
- Startup.ts
Server.ts
从 const skynetAPI = express();
中的 SkynetCore.ts
创建一个 Express Listener
这将传递给该函数:
export function F_ServerListener(express: any,globalLogger: any): void
export function F_ClusterServerListener(express: any,globalLogger: any): void
F_ClusterServerListener(...)
被 F_Main
中的 Main 方法 SkynetCore.ts
调用
所以确切的问题是,F_ClusterServerListener
只应该使用 F_ServerListener
函数,而是重新启动整个应用程序。它只应该“重新启动”F_ServerListener
,而是重新启动所有内容...
我怎样才能防止它?
SkynetCore.ts
/**
* File: src/SkynetCore.ts
* Description: Main File
* Author: Oliver Karger <kmaster@oliver-karger.de>
*/
// Enable dotenv
require('dotenv').config()
// Express
const express = require('express');
const skynetApi = express();
// Signale Loggers
const signale = require("signale");
const logger = signale.scope('Skynet')
// Startup
import { F_EnableMiddleware } from "./Startup";
// import { F_GetYargs } from "./YargParser"; --- Not going to spend time with that atm
import { F_ClusterServerListener } from "./Server";
/**
* @description Main Method
* @author Oliver Karger <kmaster@oliver-karger.de>
*/
async function F_Main(): Promise<void> {
F_EnableMiddleware(skynetApi,logger);
F_ClusterServerListener(skynetApi,logger);
}
// Main Function Call
F_Main()
.catch(e => logger.fatal(new Error(e)));
Server.ts
/**
* File: src/Server.ts
* Description: Server File
* Author: Oliver Karger <kmaster@oliver-karger.de>
*/
/**
* @description Creates Express Server / Listener
* @author Oliver Karger <kmaster@oliver-karger.de>
* @param express Express Instance
* @param globalLogger Signale Logger Instance
*/
export function F_ServerListener(express: any,globalLogger: any): void {
const logger = globalLogger.scope('Skynet','Server');
// Create Server
const skynetServer = express.listen(process.env.PORT,process.env.HOST,() => {
logger.success(`Skynet Instance available on: ${process.env.HOST}:${process.env.PORT}`);
}).on('error',(err: any) => {
logger.fatal(new Error(err));
});
}
const cluster = require("cluster");
const os = require("os");
export function F_ClusterServerListener(express: any,'Cluster Master');
const cpuS = os.cpus();
if (cluster.isMaster) {
cpuS.forEach(function() {
cluster.fork()
});
cluster.on("listening",function(worker: any) {
logger.start(`Cluster ${worker.process.pid} connected`);
});
cluster.on("disconnect",function(worker: any) {
logger.stop(`Cluster ${worker.process.pid} disconnected`);
});
cluster.on("exit",function(worker: any) {
logger.error(`Cluster ${worker.process.pid} dead`);
// Ensuring a new cluster will start if an old one dies
cluster.fork();
});
} else {
F_ServerListener(express,globalLogger);
}
}
GitHub 上提供的源代码:https://github.com/OliverKarger/skynet/tree/development
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)