Skip to content

Commit

Permalink
feat: support worker_threads (#101)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyj1991 committed Nov 2, 2022
1 parent efa8441 commit 04a1e85
Show file tree
Hide file tree
Showing 26 changed files with 956 additions and 269 deletions.
7 changes: 5 additions & 2 deletions .eslintrc
@@ -1,3 +1,6 @@
{
"extends": "eslint-config-egg"
}
"extends": "eslint-config-egg",
"parserOptions": {
"ecmaVersion": 13
}
}
8 changes: 4 additions & 4 deletions .github/workflows/nodejs.yml
Expand Up @@ -22,25 +22,25 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [12, 14, 16]
node-version: [14, 16]
os: [ubuntu-latest, macos-latest]

steps:
- name: Checkout Git Source
uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}

- name: Install Dependencies
run: npm i -g npminstall && npminstall
run: npm i

- name: Continuous Integration
run: npm run ci

- name: Code Coverage
uses: codecov/codecov-action@v1
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
15 changes: 10 additions & 5 deletions lib/agent_worker.js
Expand Up @@ -17,8 +17,14 @@ if (options.require) {
});
}

let AgentWorker;
if (options.startMode === 'worker_threads') {
AgentWorker = require('./utils/mode/impl/worker_threads/agent').AgentWorker;
} else {
AgentWorker = require('./utils/mode/impl/process/agent').AgentWorker;
}

const debug = require('debug')('egg-cluster');
const gracefulExit = require('graceful-process');
const ConsoleLogger = require('egg-logger').EggConsoleLogger;
const consoleLogger = new ConsoleLogger({ level: process.env.EGG_AGENT_WORKER_LOGGER_LEVEL });

Expand All @@ -35,22 +41,21 @@ try {
function startErrorHandler(err) {
consoleLogger.error(err);
consoleLogger.error('[agent_worker] start error, exiting with code:1');
process.exitCode = 1;
process.kill(process.pid);
AgentWorker.kill();
}

agent.ready(err => {
// don't send started message to master when start error
if (err) return;

agent.removeListener('error', startErrorHandler);
process.send({ action: 'agent-start', to: 'master' });
AgentWorker.send({ action: 'agent-start', to: 'master' });
});

// exit if agent start error
agent.once('error', startErrorHandler);

gracefulExit({
AgentWorker.gracefulExit({
logger: consoleLogger,
label: 'agent_worker',
beforeExit: () => agent.close(),
Expand Down
23 changes: 17 additions & 6 deletions lib/app_worker.js
Expand Up @@ -9,9 +9,15 @@ if (options.require) {
});
}

let AppWorker;
if (options.startMode === 'worker_threads') {
AppWorker = require('./utils/mode/impl/worker_threads/app').AppWorker;
} else {
AppWorker = require('./utils/mode/impl/process/app').AppWorker;
}

const fs = require('fs');
const debug = require('debug')('egg-cluster');
const gracefulExit = require('graceful-process');
const ConsoleLogger = require('egg-logger').EggConsoleLogger;
const consoleLogger = new ConsoleLogger({
level: process.env.EGG_APP_WORKER_LOGGER_LEVEL,
Expand All @@ -31,7 +37,7 @@ const httpsOptions = Object.assign({}, clusterConfig.https, options.https);
const port = options.port = options.port || listenConfig.port;
const protocol = (httpsOptions.key && httpsOptions.cert) ? 'https' : 'http';

process.send({
AppWorker.send({
to: 'master',
action: 'realport',
data: {
Expand All @@ -44,8 +50,7 @@ app.ready(startServer);

function exitProcess() {
// Use SIGTERM kill process, ensure trigger the gracefulExit
process.exitCode = 1;
process.kill(process.pid);
AppWorker.kill();
}

// exit if worker start timeout
Expand Down Expand Up @@ -89,7 +94,7 @@ function startServer(err) {
if (options.sticky) {
server.listen(options.stickyWorkerPort, '127.0.0.1');
// Listen to messages sent from the master. Ignore everything else.
process.on('message', (message, connection) => {
AppWorker.on('message', (message, connection) => {
if (message !== 'sticky-session:connection') {
return;
}
Expand All @@ -114,9 +119,15 @@ function startServer(err) {
server.listen(...args);
}
}

AppWorker.send({
to: 'master',
action: 'listening',
data: server.address(),
});
}

gracefulExit({
AppWorker.gracefulExit({
logger: consoleLogger,
label: 'app_worker',
beforeExit: () => app.close(),
Expand Down

0 comments on commit 04a1e85

Please sign in to comment.