返回

文章详情

展示 HN:Node.js 的 HTTP/3 和原始 QUIC 客户端/服务器 API

Hacker News2026年6月8日 18:38

Node.js 24+ 的 HTTP/3、HTTP/2 和原始 QUIC 服务器/客户端包,基于 Rust + quiche。特性:通过 QUIC/UDP 的 HTTP/3 服务器和客户端;通过同一监听器的 TLS/TCP 上的 HTTP/2 回退;原始 QUIC:双向流、数据报、会话恢复、自定义 ALPN;显式运行时选择:快速、可移植或自动;平台原生 I/O:kqueue(macOS)、io_uring(Linux 快速路径)、poll(Linux 可移植路径);fetch/SSE/EventSource 适配器;通过 @currentspace/http3/express 兼容 Express。安装 npm install @currentspace/http3。当前已为 Linux x64/arm64 (glibc) 和 macOS arm64 发布了预构建的本机二进制文件。其他平台可能回退到本地原生编译;请参见 docs/SUPPORT_MATRIX.md。快速服务器示例: import { createSecureServer } from '@currentspace/http3'; const server = createSecureServer({ key: process.env.TLS_KEY_PEM, cert: process.env.TLS_CERT_PEM }, (stream, headers) => { stream.respond({ ':status': '200', 'content-type': 'text/plain' }); stream.end(`hello ${String(headers[':path'] ?? '/')}`); }); server.listen(443, '0.0.0.0');快速客户端示例:import { connectAsync } from '@currentspace/http3'; const session = await connectAsync('example.com:443'); const stream = session.request({ ':method': 'GET', ':path': '/', ':authority': 'example.com', ':scheme': 'https' }, { endStream: true });运行时模式每个支持 QUIC 的 API 接受:runtimeMode: 'auto' | 'fast' | 'portable';fallbackPolicy: 'error' | 'warn-and-fallback'。onRuntimeEvent(info) 返回的客户端会话和服务器对象公开 runtimeInfo,自动回退还会发出带有 WARN_HTTP3_RUNTIME_FALLBACK 代码的进程警告。 import { connectQuicAsync } from '@currentspace/http3'; const session = await connectQuicAsync('https://sfu:9080', { alpn: ['sfu-repl'], rejectUnauthorized: false, runtimeMode: 'auto', fallbackPolicy: 'warn-and-fallback', }); console.log(session.runtimeInfo);有关部署矩阵、能力要求、Docker 指导、拓扑策略和原始端点合同的信息,请参见 docs/RUNTIME_MODES.md。客户端拓扑在实现中现在是显式的:原始 QUIC 快速客户端每个绑定系列共享一个工作线程和一个本地 UDP 端口;H3 快速客户端每个绑定系列共享一个工作线程和一个本地 UDP 端口;macOS 可移植模式在 kqueue 上保持相同的共享客户端工作线程所有权模型;QUIC 和 H3 服务器仍然是一端口一个工作线程架构。使用内置基准测试来检查运行时选择和内部反应器计数器:npm run bench:quic -- --profile smoke;npm run bench:h3 -- --profile smoke。0.6.0 新特性:原始 QUIC 客户端现在可以通过 connectQuic() 和 connectQuicAsync() 上的稳定公共证书和密钥选项使用 mTLS;原始 QUIC 服务器现在支持通过 clientAuth 的显式客户端证书策略,当配置验证 CA 时默认为必需;原始 QUIC 服务器会话现在公开验证的对端证书,以便应用程序可以使用 Node 的 X509Certificate API 检查或固定精确的客户端证书。有关 0.6.0 发布说明,请参见 CHANGELOG.md,关于本次发布的支持审计账本和注意事项,请参见 docs/RELEASE_EVIDENCE.md。快速 QUIC 服务器:import { createQuicServer } from '@currentspace/http3'; const server = createQuicServer({ key: process.env.TLS_KEY_PEM, cert: process.env.TLS_CERT_PEM }); server.on('session', (session) => { session.on('stream', (stream) => { stream.pipe(stream); // echo }); }); await server.listen(4433, '0.0.0.0');快速 QUIC 客户端:import { connectQuicAsync } from '@currentspace/http3'; const session = await connectQuicAsync('127.0.0.1:4433', { rejectUnauthorized: false }); const stream = session.openStream(); stream.end(Buffer.from('hello QUIC')); const chunks: Buffer[] = []; stream.on('data', (c) => chunks.push(c)); stream.on('end', () => console.log(Buffer.concat(chunks).toString()));兼容性界面:@currentspace/http3 - 规范 API;@currentspace/http3/parity - http2 风格的别名用于迁移;@currentspace/http3/h3 - HTTP/3 特定扩展命名空间。示例:原始 API 示例、Express 适配器示例、Hono serveFetch() 示例。从这里开始:快速入门、运行时模式和部署矩阵、支持矩阵、配置选项参考、错误处理指南、变更日志、部署和操作、QUIC 指南、生产文件索引、HTTP/2 对应矩阵、ECS/Fargate 部署、AWS NLB QUIC 透传、跨实例的会话票证密钥、贡献者和维护者、测试策略、贡献指南、发布证据账本、发布运行手册。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡