From 03c8cf743d1fb56a55dbc633f088b08410423c5a Mon Sep 17 00:00:00 2001 From: sjfkai Date: Thu, 15 Jun 2023 09:21:18 +0800 Subject: [PATCH] fix: ipc not work with worker_threads mode (#5210) --- lib/core/messenger/ipc.js | 4 ++++ package.json | 2 +- test/lib/core/messenger/ipc.test.js | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/core/messenger/ipc.js b/lib/core/messenger/ipc.js index 711d662efa..4feddbd6ca 100644 --- a/lib/core/messenger/ipc.js +++ b/lib/core/messenger/ipc.js @@ -2,6 +2,7 @@ const debug = require('util').debuglog('egg:util:messenger:ipc'); const is = require('is-type-of'); +const workerThreads = require('worker_threads'); const sendmessage = require('sendmessage'); const EventEmitter = require('events'); @@ -22,6 +23,9 @@ class Messenger extends EventEmitter { }); this._onMessage = this._onMessage.bind(this); process.on('message', this._onMessage); + if (!workerThreads.isMainThread) { + workerThreads.parentPort.on('message', this._onMessage); + } } /** diff --git a/package.json b/package.json index fa559aef78..bf31c2fd3f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "koa-override": "^3.0.0", "ms": "^2.1.3", "on-finished": "^2.4.1", - "sendmessage": "^1.1.0", + "sendmessage": "^2.0.0", "urllib": "^2.33.0", "urllib-next": "^3.9.0", "utility": "^1.17.0", diff --git a/test/lib/core/messenger/ipc.test.js b/test/lib/core/messenger/ipc.test.js index 9c8dad0d01..ab34031128 100644 --- a/test/lib/core/messenger/ipc.test.js +++ b/test/lib/core/messenger/ipc.test.js @@ -162,4 +162,31 @@ describe('test/lib/core/messenger/ipc.test.js', () => { } }); }); + + describe('worker_threads mode', () => { + let app; + before(() => { + mm.env('default'); + app = utils.cluster('apps/messenger-app-agent', { workers: 1, startMode: 'worker_threads' }); + app.coverage(false); + return app.ready(); + }); + after(() => app.close()); + + it('app should accept agent message', done => { + setTimeout(() => { + assert(count(app.stdout, 'agent2app') === 1); + assert(count(app.stdout, 'app2app') === 1); + assert(count(app.stdout, 'agent2agent') === 1); + assert(count(app.stdout, 'app2agent') === 1); + done(); + }, 500); + + function count(data, key) { + return data.split('\n').filter(line => { + return line.indexOf(key) >= 0; + }).length; + } + }); + }); });