QUIC
History
稳定性:1.0 - 早期开发
'node:quic' 模块提供了 QUIC 协议的实现。
要访问它,请使用 --experimental-quic 选项启动 Node.js,然后:
import quic from 'node:quic';该模块仅在 node: 方案下可用。
quic.connect(address, options?): void<string>
|
<net.SocketAddress><quic.SessionOptions><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 选项,
参数为 QuicEndpoint 或 EndpointOptions。
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 });quic.listen(onsession, options?): void<quic.OnSessionCallback><quic.SessionOptions><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 选项,
参数为 QuicEndpoint 或 EndpointOptions。
任何单个 QuicEndpoint 最多只能配置为监听服务器一次。
QuicEndpoint 封装了 QUIC 的本地 UDP 端口绑定。它既可用作客户端,也可用作服务器。
new QuicEndpoint(options?): void<quic.EndpointOptions>端点绑定的本地 UDP 套接字地址(如果有)。
如果端点当前未绑定,则值为 undefined。只读。
- 类型:
<boolean>
当 endpoint.busy 设置为 true 时,端点将暂时拒绝创建新会话。读/写。
// 标记端点为忙。将防止新会话。
endpoint.busy = true;
// 标记端点为空闲。将允许新会话。
endpoint.busy = false;当端点负载过重需要暂时拒绝新会话以赶上进度时,busy 属性很有用。
endpoint.close(): void- 返回:
<Promise>
优雅地关闭端点。当所有当前打开的会话关闭时,端点将关闭并销毁自身。一旦调用,新会话将被拒绝。
返回一个在端点销毁时履行的 promise。
- 类型:
<Promise>
当端点销毁时履行的 promise。这与 endpoint.close() 函数返回的 promise 相同。只读。
- 类型:
<boolean>
如果已调用 endpoint.close() 且关闭端点尚未完成,则为 true。只读。
endpoint.destroy(error?): void<any>通过强制所有打开的会话立即关闭来强制关闭端点。
- 类型:
<boolean>
如果已调用 endpoint.destroy(),则为 true。只读。
为活动会话收集的统计信息。只读。
endpoint[Symbol.asyncDispose](): void调用 endpoint.close() 并返回一个在端点关闭时履行的 promise。
类:QuicEndpoint.Stats
History
端点收集统计信息的视图。
- 类型:
<bigint>指示端点创建时刻的时间戳。只读。
- 类型:
<bigint>指示端点销毁时刻的时间戳。只读。
- 类型:
<bigint>此端点接收的总字节数。只读。
- 类型:
<bigint>此端点发送的总字节数。只读。
- 类型:
<bigint>此端点成功接收的 QUIC 数据包总数。只读。
- 类型:
<bigint>此端点成功发送的 QUIC 数据包总数。只读。
- 类型:
<bigint>此端点接收的对等方发起的会话总数。只读。
- 类型:
<bigint>由此端点发起的会话总数。只读。
- 类型:
<bigint>由于端点被标记为忙而拒绝初始数据包的总次数。只读。
- 类型:
<bigint>此端点上的 QUIC 重试尝试总数。只读。
- 类型:
<bigint>由于 QUIC 版本不匹配而被拒绝的会话总数。只读。
- 类型:
<bigint>此端点处理的无状态重置总数。只读。
- 类型:
<bigint>在握手完成前关闭的会话总数。只读。
类:QuicSession
History
QuicSession 代表 QUIC 连接的本地端。
session.close(): void- 返回:
<Promise>
发起会话的优雅关闭。现有流将被允许完成,但不会打开新流。一旦所有流关闭,会话将被销毁。返回的 promise 将在会话销毁后履行。
- 类型:
<Promise>
会话销毁后履行的 promise。
session.destroy(error?): void<any>立即销毁会话。所有流将被销毁,会话将关闭。
- 类型:
<boolean>
如果已调用 session.destroy(),则为 true。只读。
创建此会话的端点。只读。
当远程对等方发起新流时调用的回调。读/写。
当从远程对等方收到新数据报时调用的回调。读/写。
当数据报状态更新时调用的回调。读/写。
当路径验证更新时调用的回调。读/写。
当收到新会话票据时调用的回调。读/写。
当发起版本协商时调用的回调。读/写。
当 TLS 握手完成时调用的回调。读/写。
session.createBidirectionalStream(options?): void<Object><ArrayBuffer>
|
<Blob><number><Promise>
关于
<quic.QuicStream>
的 promise打开一个新的双向流。如果未指定 body 选项,出站流将半关闭。
session.createUnidirectionalStream(options?): void<Object><ArrayBuffer>
|
<Blob><number><Promise>
关于
<quic.QuicStream>
的 promise打开一个新的单向流。如果未指定 body 选项,出站流将关闭。
- 类型:
<Object>|<undefined>Attributeslocal:<net.SocketAddress>remote:<net.SocketAddress>
与会话关联的本地和远程套接字地址。只读。
session.sendDatagram(datagram): void向远程对等方发送不可靠的数据报,返回数据报 ID。
如果数据报负载指定为 ArrayBufferView,则该视图的所有权将转移到底层流。
返回会话的当前统计信息。只读。
session.updateKey(): void发起会话的密钥更新。
session[Symbol.asyncDispose](): void调用 session.close() 并返回一个在会话关闭时履行的 promise。
类:QuicSession.Stats
History
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
类:QuicStream
History
- 类型:
<Promise>
当流完全关闭时兑现的 Promise。
stream.destroy(error?): void<any>立即且突然地销毁流。
- 类型:
<boolean>
如果已调用 stream.destroy() 则为 true。
- 类型:
<string>'bidi'或'uni'其中之一。
流的方向性。只读。
- 类型:
<bigint>
流 ID。只读。
当流被阻塞时调用的回调。可读/可写。
当流被重置时调用的回调。可读/可写。
创建此流的会话。只读。
流的当前统计信息。只读。
类:QuicStream.Stats
History
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
- 类型:
<bigint>
类型:EndpointOptions
History
- 类型:
<Object>
构建新的 QuicEndpoint 实例时传递的端点配置选项。
- 类型:
<net.SocketAddress>|<string>端点应绑定的本地 UDP 地址和端口。
如果未指定,端点将绑定到随机端口上的 IPv4 localhost。
端点维护一个已验证 socket 地址的内部缓存作为性能优化。此选项设置缓存地址的最大数量。这是一个高级选项,用户通常无需指定。
- 类型:
<boolean>
当为 true 时,表示端点应仅绑定到 IPv6 地址。
指定每个远程对等点地址允许的最大并发会话数。
指定并发会话的最大总数。
指定每个远程对等点地址允许的最大 QUIC 重试尝试次数。
指定每个远程对等点地址允许的最大无状态重置次数。
指定 QUIC 重试令牌被视为有效的时长。
- 类型:{ArrayBufferView}
指定用于生成 QUIC 重试令牌的 16 字节密钥。
指定 QUIC 令牌被视为有效的时长。
- 类型:{ArrayBufferView}
指定用于生成 QUIC 令牌的 16 字节密钥。
- 类型:
<number>
- 类型:
<number>
- 类型:
<number>
- 类型:
<boolean>
当为 true 时,要求端点在建立新连接时使用重试数据包验证对等点地址。
类型:SessionOptions
History
- 类型:
<string>
ALPN 协议标识符。
用于会话的 CA 证书。
- 类型:
<string>
指定将使用的拥塞控制算法。必须设置为 'reno'、'cubic' 或 'bbr' 其中之一。
这是一个高级选项,用户通常无需指定。
用于会话的 TLS 证书。
- 类型:
<string>
支持的 TLS 1.3 加密算法列表。
用于会话的 CRL。
- 类型:
<string>
支持的 TLS 1.3 加密组列表。
- 类型:
<boolean>
为 true 以启用 TLS 密钥日志输出。
- 类型:{KeyObject|KeyObject[]}
用于会话的 TLS 加密密钥。
指定最大 UDP 数据包负载大小。
指定最大流流控窗口大小。
指定最大会话流控窗口大小。
- 类型:
<number>
允许的最小 QUIC 版本号。这是一个高级选项,用户通常无需指定。
- 类型:
<string>'use'、'ignore'或'default'其中之一。
当远程对等点通告首选地址时,此选项指定是使用它还是忽略它。
- 类型:
<boolean>
如果应启用 qlog 输出则为 true。
- 类型:{ArrayBufferView} 用于 0RTT 会话恢复的会话令牌。
指定 TLS 握手在完成前允许花费的最大毫秒数,超过该时间将超时。
- 类型:
<string>
要定位的对等服务器名称。
- 类型:
<boolean>
为 true 以启用 TLS 追踪输出。
用于会话的 QUIC 传输参数。
指定会话允许的最大未确认数据包数。
- 类型:
<boolean>
为 true 以要求验证 TLS 客户端证书。
- 类型:
<boolean>
为 true 以要求私钥验证。
- 类型:
<number>
要使用的 QUIC 版本号。这是一个高级选项,用户通常无需指定。
类型:TransportParams
History
- 类型:
<net.SocketAddress>要通告的首选 IPv4 地址。
- 类型:
<net.SocketAddress>要通告的首选 IPv6 地址。
回调:OnSessionCallback
History
<quic.QuicEndpoint><quic.QuicSession>当远程对等方发起新会话时调用的回调函数。
回调:OnStreamCallback
History
<quic.QuicSession><quic.QuicStream>回调:OnDatagramCallback
History
回调:OnDatagramStatusCallback
History
回调:OnPathValidationCallback
History
<quic.QuicSession><string>'success'
、
'failure'
或
'aborted'
之一。<net.SocketAddress><net.SocketAddress><net.SocketAddress><net.SocketAddress><boolean>回调:OnSessionTicketCallback
History
<quic.QuicSession><Object>回调:OnVersionNegotiationCallback
History
回调:OnHandshakeCallback
History
回调:OnBlockedCallback
History
<quic.QuicStream>回调:OnStreamErrorCallback
History
<quic.QuicStream><any>通道:quic.endpoint.created
History
<quic.QuicEndpoint><quic.EndpointOptions>通道:quic.endpoint.listen
History
<quic.QuicEndpoint><quic.SessionOptions>通道:quic.endpoint.closing
History
<quic.QuicEndpoint><boolean>通道:quic.endpoint.closed
History
<quic.QuicEndpoint>通道:quic.endpoint.error
History
<quic.QuicEndpoint><any>通道:quic.endpoint.busy.change
History
<quic.QuicEndpoint><boolean>