On this page

QUIC

History
Source Code: lib/quic.js

稳定性:1.0 - 早期开发

'node:quic' 模块提供了 QUIC 协议的实现。 要访问它,请使用 --experimental-quic 选项启动 Node.js,然后:

该模块仅在 node: 方案下可用。

M

quic.connect

History
quic.connect(address, options?): void
Attributes
返回: <Promise> 一个关于 <quic.QuicSession> 的 promise

发起一个新的客户端会话。

import { connect } from 'node:quic';
import { Buffer } from 'node:buffer';

const enc = new TextEncoder();
const alpn = 'foo';
const client = await connect('123.123.123.123:8888', { alpn });
await client.createUnidirectionalStream({
  body: enc.encode('hello world'),
});

默认情况下,每次调用 connect(...) 都会创建一个新的本地 QuicEndpoint 实例,绑定到一个新的随机本地 IP 端口。要 指定要使用的确切本地地址,或在单个本地端口上复用多个 QUIC 会话,请传递 endpoint 选项, 参数为 QuicEndpointEndpointOptions

import { QuicEndpoint, connect } from 'node:quic';

const endpoint = new QuicEndpoint({
  address: '127.0.0.1:1234',
});

const client = await connect('123.123.123.123:8888', { endpoint });
M

quic.listen

History
quic.listen(onsession, options?): void
Attributes
返回: <Promise> 一个关于 <quic.QuicEndpoint> 的 promise

配置端点以作为服务器监听。当远程对等方发起新会话时, 给定的 onsession 回调将与创建的会话一起被调用。

import { listen } from 'node:quic';

const endpoint = await listen((session) => {
  // ... 处理会话
});

// 关闭端点允许在调用 close 时打开的任何会话自然完成,同时防止新会话被
// 发起。一旦所有现有会话完成,端点将被销毁。该调用返回一个 promise,在
// 端点销毁后解析。
await endpoint.close();

默认情况下,每次调用 listen(...) 都会创建一个新的本地 QuicEndpoint 实例,绑定到一个新的随机本地 IP 端口。要 指定要使用的确切本地地址,或在单个本地端口上复用多个 QUIC 会话,请传递 endpoint 选项, 参数为 QuicEndpointEndpointOptions

任何单个 QuicEndpoint 最多只能配置为监听服务器一次。

QuicEndpoint 封装了 QUIC 的本地 UDP 端口绑定。它既可用作客户端,也可用作服务器。

C

QuicEndpoint Constructor

History
new QuicEndpoint(options?): void
Attributes
P

endpoint.address

History

端点绑定的本地 UDP 套接字地址(如果有)。

如果端点当前未绑定,则值为 undefined。只读。

P

endpoint.busy

History

endpoint.busy 设置为 true 时,端点将暂时拒绝创建新会话。读/写。

// 标记端点为忙。将防止新会话。
endpoint.busy = true;

// 标记端点为空闲。将允许新会话。
endpoint.busy = false;

当端点负载过重需要暂时拒绝新会话以赶上进度时,busy 属性很有用。

M

endpoint.close

History
endpoint.close(): void

优雅地关闭端点。当所有当前打开的会话关闭时,端点将关闭并销毁自身。一旦调用,新会话将被拒绝。

返回一个在端点销毁时履行的 promise。

P

endpoint.closed

History

当端点销毁时履行的 promise。这与 endpoint.close() 函数返回的 promise 相同。只读。

P

endpoint.closing

History

如果已调用 endpoint.close() 且关闭端点尚未完成,则为 true。只读。

M

endpoint.destroy

History
endpoint.destroy(error?): void
Attributes
error:<any>

通过强制所有打开的会话立即关闭来强制关闭端点。

P

endpoint.destroyed

History

如果已调用 endpoint.destroy(),则为 true。只读。

P

endpoint.stats

History

为活动会话收集的统计信息。只读。

M

endpoint[Symbol.asyncDispose]

History
endpoint[Symbol.asyncDispose](): void

调用 endpoint.close() 并返回一个在端点关闭时履行的 promise。

类:QuicEndpoint.Stats

History

端点收集统计信息的视图。

P

endpointStats.createdAt

History
  • 类型:<bigint> 指示端点创建时刻的时间戳。只读。
P

endpointStats.destroyedAt

History
  • 类型:<bigint> 指示端点销毁时刻的时间戳。只读。
P

endpointStats.bytesReceived

History
  • 类型:<bigint> 此端点接收的总字节数。只读。
P

endpointStats.bytesSent

History
  • 类型:<bigint> 此端点发送的总字节数。只读。
P

endpointStats.packetsReceived

History
  • 类型:<bigint> 此端点成功接收的 QUIC 数据包总数。只读。
P

endpointStats.packetsSent

History
  • 类型:<bigint> 此端点成功发送的 QUIC 数据包总数。只读。
P

endpointStats.serverSessions

History
  • 类型:<bigint> 此端点接收的对等方发起的会话总数。只读。
P

endpointStats.clientSessions

History
  • 类型:<bigint> 由此端点发起的会话总数。只读。
P

endpointStats.serverBusyCount

History
  • 类型:<bigint> 由于端点被标记为忙而拒绝初始数据包的总次数。只读。
P

endpointStats.retryCount

History
  • 类型:<bigint> 此端点上的 QUIC 重试尝试总数。只读。
P

endpointStats.versionNegotiationCount

History
  • 类型:<bigint> 由于 QUIC 版本不匹配而被拒绝的会话总数。只读。
P

endpointStats.statelessResetCount

History
  • 类型:<bigint> 此端点处理的无状态重置总数。只读。
P

endpointStats.immediateCloseCount

History
  • 类型:<bigint> 在握手完成前关闭的会话总数。只读。

类:QuicSession

History

QuicSession 代表 QUIC 连接的本地端。

M

session.close

History
session.close(): void

发起会话的优雅关闭。现有流将被允许完成,但不会打开新流。一旦所有流关闭,会话将被销毁。返回的 promise 将在会话销毁后履行。

P

session.closed

History

会话销毁后履行的 promise。

M

session.destroy

History
session.destroy(error?): void
Attributes
error:<any>

立即销毁会话。所有流将被销毁,会话将关闭。

P

session.destroyed

History

如果已调用 session.destroy(),则为 true。只读。

P

session.endpoint

History

创建此会话的端点。只读。

P

session.onstream

History

当远程对等方发起新流时调用的回调。读/写。

P

session.ondatagram

History

当从远程对等方收到新数据报时调用的回调。读/写。

P

session.ondatagramstatus

History

当数据报状态更新时调用的回调。读/写。

P

session.onpathvalidation

History

当路径验证更新时调用的回调。读/写。

P

session.onsessionticket

History

当收到新会话票据时调用的回调。读/写。

P

session.onversionnegotiation

History

当发起版本协商时调用的回调。读/写。

P

session.onhandshake

History

当 TLS 握手完成时调用的回调。读/写。

M

session.createBidirectionalStream

History
session.createBidirectionalStream(options?): void
Attributes
options:<Object>
sendOrder:<number>
返回: <Promise> 关于 <quic.QuicStream> 的 promise

打开一个新的双向流。如果未指定 body 选项,出站流将半关闭。

M

session.createUnidirectionalStream

History
session.createUnidirectionalStream(options?): void
Attributes
options:<Object>
sendOrder:<number>
返回: <Promise> 关于 <quic.QuicStream> 的 promise

打开一个新的单向流。如果未指定 body 选项,出站流将关闭。

P

session.path

History

与会话关联的本地和远程套接字地址。只读。

M

session.sendDatagram

History
session.sendDatagram(datagram): void
Attributes
datagram:<string>
返回: <bigint>

向远程对等方发送不可靠的数据报,返回数据报 ID。 如果数据报负载指定为 ArrayBufferView,则该视图的所有权将转移到底层流。

P

session.stats

History

返回会话的当前统计信息。只读。

M

session.updateKey

History
session.updateKey(): void

发起会话的密钥更新。

M

session[Symbol.asyncDispose]

History
session[Symbol.asyncDispose](): void

调用 session.close() 并返回一个在会话关闭时履行的 promise。

类:QuicSession.Stats

History
P

sessionStats.createdAt

History
P

sessionStats.closingAt

History
P

sessionStats.handshakeCompletedAt

History
P

sessionStats.handshakeConfirmedAt

History
P

sessionStats.bytesReceived

History
P

sessionStats.bytesSent

History
P

sessionStats.bidiInStreamCount

History
P

sessionStats.bidiOutStreamCount

History
P

sessionStats.uniInStreamCount

History
P

sessionStats.uniOutStreamCount

History
P

sessionStats.maxBytesInFlights

History
P

sessionStats.bytesInFlight

History
P

sessionStats.blockCount

History
P

sessionStats.cwnd

History
P

sessionStats.latestRtt

History
P

sessionStats.minRtt

History
P

sessionStats.rttVar

History
P

sessionStats.smoothedRtt

History
P

sessionStats.ssthresh

History
P

sessionStats.datagramsReceived

History
P

sessionStats.datagramsSent

History
P

sessionStats.datagramsAcknowledged

History
P

sessionStats.datagramsLost

History

类:QuicStream

History
P

stream.closed

History

当流完全关闭时兑现的 Promise。

M

stream.destroy

History
stream.destroy(error?): void
Attributes
error:<any>

立即且突然地销毁流。

P

stream.destroyed

History

如果已调用 stream.destroy() 则为 true。

P

stream.direction

History
  • 类型:<string> 'bidi''uni' 其中之一。

流的方向性。只读。

P

stream.id

History

流 ID。只读。

P

stream.onblocked

History

当流被阻塞时调用的回调。可读/可写。

P

stream.onreset

History

当流被重置时调用的回调。可读/可写。

P

stream.readable

History
P

stream.session

History

创建此流的会话。只读。

P

stream.stats

History

流的当前统计信息。只读。

类:QuicStream.Stats

History
P

streamStats.ackedAt

History
P

streamStats.bytesReceived

History
P

streamStats.bytesSent

History
P

streamStats.createdAt

History
P

streamStats.destroyedAt

History
P

streamStats.finalSize

History
P

streamStats.isConnected

History
P

streamStats.maxOffset

History
P

streamStats.maxOffsetAcknowledged

History
P

streamStats.maxOffsetReceived

History
P

streamStats.openedAt

History
P

streamStats.receivedAt

History

类型:EndpointOptions

History

构建新的 QuicEndpoint 实例时传递的端点配置选项。

P

endpointOptions.address

History

如果未指定,端点将绑定到随机端口上的 IPv4 localhost

P

endpointOptions.addressLRUSize

History

端点维护一个已验证 socket 地址的内部缓存作为性能优化。此选项设置缓存地址的最大数量。这是一个高级选项,用户通常无需指定。

P

endpointOptions.ipv6Only

History

当为 true 时,表示端点应仅绑定到 IPv6 地址。

P

endpointOptions.maxConnectionsPerHost

History

指定每个远程对等点地址允许的最大并发会话数。

P

endpointOptions.maxConnectionsTotal

History

指定并发会话的最大总数。

P

endpointOptions.maxRetries

History

指定每个远程对等点地址允许的最大 QUIC 重试尝试次数。

P

endpointOptions.maxStatelessResetsPerHost

History

指定每个远程对等点地址允许的最大无状态重置次数。

P

endpointOptions.retryTokenExpiration

History

指定 QUIC 重试令牌被视为有效的时长。

P

endpointOptions.resetTokenSecret

History
  • 类型:{ArrayBufferView}

指定用于生成 QUIC 重试令牌的 16 字节密钥。

P

endpointOptions.tokenExpiration

History

指定 QUIC 令牌被视为有效的时长。

P

endpointOptions.tokenSecret

History
  • 类型:{ArrayBufferView}

指定用于生成 QUIC 令牌的 16 字节密钥。

P

endpointOptions.udpReceiveBufferSize

History
P

endpointOptions.udpSendBufferSize

History
P

endpointOptions.udpTTL

History
P

endpointOptions.validateAddress

History

当为 true 时,要求端点在建立新连接时使用重试数据包验证对等点地址。

类型:SessionOptions

History
P

sessionOptions.alpn

History

ALPN 协议标识符。

P

sessionOptions.ca

History

用于会话的 CA 证书。

P

sessionOptions.cc

History

指定将使用的拥塞控制算法。必须设置为 'reno''cubic''bbr' 其中之一。

这是一个高级选项,用户通常无需指定。

P

sessionOptions.certs

History

用于会话的 TLS 证书。

P

sessionOptions.ciphers

History

支持的 TLS 1.3 加密算法列表。

P

sessionOptions.crl

History

用于会话的 CRL。

P

sessionOptions.groups

History

支持的 TLS 1.3 加密组列表。

P

sessionOptions.keylog

History

为 true 以启用 TLS 密钥日志输出。

  • 类型:{KeyObject|KeyObject[]}

用于会话的 TLS 加密密钥。

P

sessionOptions.maxPayloadSize

History

指定最大 UDP 数据包负载大小。

P

sessionOptions.maxStreamWindow

History

指定最大流流控窗口大小。

P

sessionOptions.maxWindow

History

指定最大会话流控窗口大小。

P

sessionOptions.minVersion

History

允许的最小 QUIC 版本号。这是一个高级选项,用户通常无需指定。

P

sessionOptions.preferredAddressPolicy

History
  • 类型:<string> 'use''ignore''default' 其中之一。

当远程对等点通告首选地址时,此选项指定是使用它还是忽略它。

P

sessionOptions.qlog

History

如果应启用 qlog 输出则为 true。

P

sessionOptions.sessionTicket

History
  • 类型:{ArrayBufferView} 用于 0RTT 会话恢复的会话令牌。
P

sessionOptions.handshakeTimeout

History

指定 TLS 握手在完成前允许花费的最大毫秒数,超过该时间将超时。

P

sessionOptions.sni

History

要定位的对等服务器名称。

P

sessionOptions.tlsTrace

History

为 true 以启用 TLS 追踪输出。

P

sessionOptions.transportParams

History

用于会话的 QUIC 传输参数。

P

sessionOptions.unacknowledgedPacketThreshold

History

指定会话允许的最大未确认数据包数。

P

sessionOptions.verifyClient

History

为 true 以要求验证 TLS 客户端证书。

P

sessionOptions.verifyPrivateKey

History

为 true 以要求私钥验证。

P

sessionOptions.version

History

要使用的 QUIC 版本号。这是一个高级选项,用户通常无需指定。

类型:TransportParams

History
P

transportParams.preferredAddressIpv4

History
P

transportParams.preferredAddressIpv6

History
P

transportParams.initialMaxStreamDataBidiLocal

History
P

transportParams.initialMaxStreamDataBidiRemote

History
P

transportParams.initialMaxStreamDataUni

History
P

transportParams.initialMaxData

History
P

transportParams.initialMaxStreamsBidi

History
P

transportParams.initialMaxStreamsUni

History
P

transportParams.maxIdleTimeout

History
P

transportParams.activeConnectionIDLimit

History
P

transportParams.ackDelayExponent

History
P

transportParams.maxAckDelay

History
P

transportParams.maxDatagramFrameSize

History

回调:OnSessionCallback

History
Attributes

当远程对等方发起新会话时调用的回调函数。

回调:OnStreamCallback

History
Attributes

回调:OnDatagramCallback

History
Attributes

回调:OnDatagramStatusCallback

History
Attributes
status:<string>
为  'lost''acknowledged' 之一。

回调:OnPathValidationCallback

History
Attributes
result:<string>
为  'success''failure''aborted' 之一。
newLocalAddress:<net.SocketAddress>
newRemoteAddress:<net.SocketAddress>
oldLocalAddress:<net.SocketAddress>
oldRemoteAddress:<net.SocketAddress>
preferredAddress:<boolean>

回调:OnSessionTicketCallback

History
Attributes

回调:OnVersionNegotiationCallback

History
Attributes
version:<number>
requestedVersions:<number[]>
supportedVersions:<number[]>

回调:OnHandshakeCallback

History
Attributes
cipher:<string>
cipherVersion:<string>
validationErrorReason:<string>
validationErrorCode:<number>
earlyDataAccepted:<boolean>

回调:OnBlockedCallback

History
Attributes

回调:OnStreamErrorCallback

History
Attributes

通道:quic.endpoint.created

History
Attributes

通道:quic.endpoint.listen

History
Attributes

通道:quic.endpoint.closing

History
Attributes
hasPendingError:<boolean>

通道:quic.endpoint.closed

History
Attributes

通道:quic.endpoint.error

History
Attributes

通道:quic.endpoint.busy.change

History
Attributes

通道:quic.session.created.client

History

通道:quic.session.created.server

History

通道:quic.session.open.stream

History

通道:quic.session.received.stream

History

通道:quic.session.send.datagram

History

通道:quic.session.update.key

History

通道:quic.session.closing

History

通道:quic.session.closed

History

通道:quic.session.receive.datagram

History

通道:quic.session.receive.datagram.status

History

通道:quic.session.path.validation

History

通道:quic.session.ticket

History

通道:quic.session.version.negotiation

History

通道:quic.session.handshake

History