forked from svrjs/svrjs
Add warning about worker count limited to one when using Bun 1.0 and newer with shimmed (not native) clustering module.
This commit is contained in:
parent
7973dafa60
commit
e828bb9173
2 changed files with 36 additions and 14 deletions
|
@ -3,7 +3,7 @@
|
||||||
"port": 80,
|
"port": 80,
|
||||||
"pubport": 80,
|
"pubport": 80,
|
||||||
"page404": "404.html",
|
"page404": "404.html",
|
||||||
"timestamp": 1694365365939,
|
"timestamp": 1694366855651,
|
||||||
"blacklist": [],
|
"blacklist": [],
|
||||||
"nonStandardCodes": [],
|
"nonStandardCodes": [],
|
||||||
"enableCompression": true,
|
"enableCompression": true,
|
||||||
|
|
48
svr.js
48
svr.js
|
@ -151,6 +151,7 @@ if (!singlethreaded) {
|
||||||
cluster.isMaster = !process.env.NODE_UNIQUE_ID;
|
cluster.isMaster = !process.env.NODE_UNIQUE_ID;
|
||||||
cluster.isPrimary = cluster.isMaster;
|
cluster.isPrimary = cluster.isMaster;
|
||||||
cluster.isWorker = !cluster.isMaster;
|
cluster.isWorker = !cluster.isMaster;
|
||||||
|
cluster.__shimmed__ = true;
|
||||||
|
|
||||||
if (cluster.isWorker) {
|
if (cluster.isWorker) {
|
||||||
// Shim the cluster.worker object for worker processes
|
// Shim the cluster.worker object for worker processes
|
||||||
|
@ -329,6 +330,7 @@ var SVRJSInitialized = false;
|
||||||
var exiting = false;
|
var exiting = false;
|
||||||
var reallyExiting = false;
|
var reallyExiting = false;
|
||||||
var crashed = false;
|
var crashed = false;
|
||||||
|
var threadLimitWarned = false;
|
||||||
|
|
||||||
function SVRJSFork() {
|
function SVRJSFork() {
|
||||||
// Log
|
// Log
|
||||||
|
@ -336,27 +338,47 @@ function SVRJSFork() {
|
||||||
// Fork new worker
|
// Fork new worker
|
||||||
var newWorker = {};
|
var newWorker = {};
|
||||||
try {
|
try {
|
||||||
newWorker = cluster.fork();
|
if (cluster.__shimmed__ && process.isBun && process.versions.bun && process.versions.bun[0] != "0" && !threadLimitWarned) {
|
||||||
|
threadLimitWarned = true;
|
||||||
|
serverconsole.locwarnmessage("SVR.JS limited the number of workers to one, because of startup problems in Bun 1.0 and newer with shimmed (not native) clustering module. Reliability may suffer.");
|
||||||
|
}
|
||||||
|
if (!(cluster.__shimmed__ && process.isBun && process.versions.bun && process.versions.bun[0] != "0" && Object.keys(cluster.workers) > 0)) {
|
||||||
|
newWorker = cluster.fork();
|
||||||
|
} else {
|
||||||
|
if (SVRJSInitialized) serverconsole.locwarnmessage("SVR.JS limited the number of workers to one, because of startup problems in Bun 1.0 and newer with shimmed (not native) clustering module. Reliability may suffer.");
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if(err.name == "NotImplementedError") {
|
if(err.name == "NotImplementedError") {
|
||||||
// If cluster.fork throws a NotImplementedError, shim cluster module
|
// If cluster.fork throws a NotImplementedError, shim cluster module
|
||||||
cluster.bunShim();
|
cluster.bunShim();
|
||||||
newWorker = cluster.fork();
|
if (cluster.__shimmed__ && process.isBun && process.versions.bun && process.versions.bun[0] != "0" && !threadLimitWarned) {
|
||||||
|
threadLimitWarned = true;
|
||||||
|
serverconsole.locwarnmessage("SVR.JS limited the number of workers to one, because of startup problems in Bun 1.0 and newer with shimmed (not native) clustering module. Reliability may suffer.");
|
||||||
|
}
|
||||||
|
if (!(cluster.__shimmed__ && process.isBun && process.versions.bun && process.versions.bun[0] != "0" && Object.keys(cluster.workers) > 0)) {
|
||||||
|
newWorker = cluster.fork();
|
||||||
|
} else {
|
||||||
|
if (SVRJSInitialized) serverconsole.locwarnmessage("SVR.JS limited the number of workers to one, because of startup problems in Bun 1.0 and newer with shimmed (not native) clustering module. Reliability may suffer.");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newWorker.on("error", function (err) {
|
|
||||||
if(!reallyExiting) serverconsole.locwarnmessage("There was a problem when handling SVR.JS worker! (from master process side) Reason: " + err.message);
|
// Add event listeners
|
||||||
});
|
if(newWorker.on) {
|
||||||
newWorker.on("exit", function () {
|
newWorker.on("error", function (err) {
|
||||||
if (!exiting && Object.keys(cluster.workers).length == 0) {
|
if(!reallyExiting) serverconsole.locwarnmessage("There was a problem when handling SVR.JS worker! (from master process side) Reason: " + err.message);
|
||||||
crashed = true;
|
});
|
||||||
SVRJSFork();
|
newWorker.on("exit", function () {
|
||||||
}
|
if (!exiting && Object.keys(cluster.workers).length == 0) {
|
||||||
});
|
crashed = true;
|
||||||
newWorker.on("message", bruteForceListenerWrapper(newWorker));
|
SVRJSFork();
|
||||||
newWorker.on("message", listenConnListener);
|
}
|
||||||
|
});
|
||||||
|
newWorker.on("message", bruteForceListenerWrapper(newWorker));
|
||||||
|
newWorker.on("message", listenConnListener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var http = require("http");
|
var http = require("http");
|
||||||
|
|
Reference in a new issue