duplex([options])


  • options <Object>
    • highWaterMark <number> 双向的缓冲区大小。 默认值: 4
    • backpressure <string> 双向策略。 默认: 'strict'
    • signal <AbortSignal> 两个通道的取消信号。
    • a <Object> 特定于 A 到 B 方向的选项。覆盖共享选项。
    • b <Object> 特定于 B 到 A 方向的选项。覆盖共享选项。
  • 返回:<Array> 一对 [channelA, channelB] 双工通道。

创建一对连接的双工通道以实现双向通信,类似于 socketpair()。写入一个通道的写入端的数据会出现在另一个通道的可读端。

🌐 Create a pair of connected duplex channels for bidirectional communication, similar to socketpair(). Data written to one channel's writer appears in the other channel's readable.

每个通道都有:

🌐 Each channel has:

  • writer — 一个用于向节点发送数据的 [Writer 接口][] 对象。
  • readable — 一个用于从对等方读取数据的 AsyncIterable<Uint8Array[]>
  • close() — 关闭该端的通道(幂等)。
  • [Symbol.asyncDispose]() — 为 await using 提供异步释放支持。
import { duplex, text } from 'node:stream/iter';

const [client, server] = duplex();

// Server echoes back
const serving = (async () => {
  for await (const chunks of server.readable) {
    await server.writer.writev(chunks);
  }
})();

await client.writer.write('hello');
await client.writer.end();

console.log(await text(server.readable)); // handled by echo
await serving;const { duplex, text } = require('node:stream/iter');

async function run() {
  const [client, server] = duplex();

  // Server echoes back
  const serving = (async () => {
    for await (const chunks of server.readable) {
      await server.writer.writev(chunks);
    }
  })();

  await client.writer.write('hello');
  await client.writer.end();

  console.log(await text(server.readable)); // handled by echo
  await serving;
}

run().catch(console.error);