mirror of
https://github.com/nodejs/node.git
synced 2025-05-07 23:52:40 +00:00

In combination with Atomics, this makes it possible to implement generic synchronous functionality, e.g. `importScript()`, in Workers purely by communicating with other threads. This is a continuation of https://github.com/nodejs/node/pull/26686, where a preference for a solution was voiced that allowed reading individual messages, rather than emitting all messages through events. PR-URL: https://github.com/nodejs/node/pull/27294 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
26 lines
1002 B
JavaScript
26 lines
1002 B
JavaScript
'use strict';
|
||
const common = require('../common');
|
||
const assert = require('assert');
|
||
const { MessageChannel, receiveMessageOnPort } = require('worker_threads');
|
||
|
||
const { port1, port2 } = new MessageChannel();
|
||
|
||
const message1 = { hello: 'world' };
|
||
const message2 = { foo: 'bar' };
|
||
|
||
// Make sure receiveMessageOnPort() works in a FIFO way, the same way it does
|
||
// when we’re using events.
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), undefined);
|
||
port1.postMessage(message1);
|
||
port1.postMessage(message2);
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 });
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message2 });
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), undefined);
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), undefined);
|
||
|
||
// Make sure message handlers aren’t called.
|
||
port2.on('message', common.mustNotCall());
|
||
port1.postMessage(message1);
|
||
assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 });
|
||
port1.close();
|