本文档涵盖了 Bun 高性能的 HTTP/WebSocket 服务器 API,包括 Bun.serve() 函数、请求路由机制、WebSocket 升级处理以及底层服务器架构。有关 HTTP 客户端功能,请参阅 HTTP 客户端和 Fetch API。有关更底层的套接字 API,请参阅 套接字 API 和网络协议。
Bun.serve() API 提供了一个基于 µWebSockets (uWS) 构建的高性能 HTTP 和 WebSocket 服务器。该服务器支持 HTTP 和 HTTPS 协议、自动 WebSocket 升级、静态文件服务、动态路由以及用于可扩展性的插件系统。
Bun 使用通用的 NewServer 函数实现服务器,该函数根据协议和模式创建不同的服务器变体
来源: src/bun.js/api/server.zig423-447
服务器生命周期涉及初始化、路由设置、监听和请求处理
来源: src/bun.js/api/server.zig1-50 src/deps/libuwsockets.cpp26-37
每个传入请求都会创建一个 RequestContext 来管理请求生命周期
来源: src/bun.js/api/server.zig445 src/bun.js/webcore/streams.zig679-708
服务器通过多个阶段处理请求
来源: src/bun.js/api/server.zig67-187 src/bun.js/api/server.zig606-608
Bun 支持多种路由机制,通过 AnyRoute 联合
| 路由类型 | 目的 | 实现 |
|---|---|---|
静态 | 静态文件服务 | StaticRoute |
html | HTML 包服务 | HTMLBundle.Route |
framework_router | 文件系统路由 | FrameworkRouter |
来源: src/bun.js/api/server.zig67-87
静态路由将 URL 模式直接映射到响应或文件
来源: src/bun.js/api/server.zig62-63 src/http.zig37
框架路由器实现了类似 Next.js 的基于文件系统的路由
来源: src/bun.js/api/server.zig146-182
HTTP 连接可以通过 upgrade() 方法升级为 WebSocket 连接
来源: src/bun.js/api/server.zig656-921
WebSocket 行为通过 websocket 配置选项进行配置
来源: src/bun.js/api/server.zig48 src/bun.js/api/server/WebSocketServerContext.zig
ServerConfig 结构定义了所有服务器选项
来源: src/bun.js/api/server/ServerConfig.zig
| 选项 | 类型 | 目的 |
|---|---|---|
port | 数字 | 要监听的端口 |
hostname | 字符串 | 要绑定的主机 |
fetch | 函数 | 请求处理程序 |
websocket(WebSocket) | 对象 | WebSocket 配置 |
tls | 对象 | TLS/SSL 配置 |
development | 布尔值 | 启用开发功能 |
maxRequestBodySize | 数字 | 最大请求正文大小 |
lowMemoryMode | 布尔值 | 针对低内存进行优化 |
来源: src/bun.js/api/server/ServerConfig.zig
服务器可以异步加载插件以扩展功能
来源: src/bun.js/api/server.zig193-415
插件与多个服务器组件集成
来源: src/bun.js/api/server.zig243-376
服务器为高性能运行实现了细致的内存管理
RequestContextStackAllocator 进行池化和重用来源: src/bun.js/api/server.zig457 src/bun.js/api/server.zig555-560
该服务器基于 µWebSockets 构建,以实现高性能网络
来源: src/deps/libuwsockets.cpp134-144 packages/bun-uws/src/HttpContext.h224-260