Vercel Functions 的 Bun 运行时现已支持 Bun.serve 作为入口

Vercel Functions 的 Bun 运行时现已支持 Bun.serve 作为入口

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

Vercel Functions 的 Bun 运行时现已支持 Bun.serve() 作为函数入口,包括 WebSocket 处理。通过设置 vercel.json 中的 bunVersion 启用,可部署路由服务器和 WebSocket 连接。WebSocket 运行在 Fluid 计算上,按活跃 CPU 计费,连接固定于单实例,需用外部存储协调跨实例消息。

🔎

延伸解读

部署方式与路由支持

Bun.serve() 作为入口时,可直接使用路由映射,支持静态路径、动态参数(如 /api/users/:id)和通配符(/*)。这意味着开发者可以像本地运行 Bun 一样部署到 Vercel,无需额外框架封装。但需注意,路由配置需在项目根目录的 server.ts 中定义,且启用 Bun 运行时需在 vercel.json 中设置 bunVersion。

WebSocket 的计费与实例限制

WebSocket 连接运行在 Fluid 计算上,采用活跃 CPU 计费,空闲连接不产生费用,适合低频交互场景。但连接固定于单个函数实例,跨实例消息需借助外部存储协调。这意味着如果应用需要横向扩展或跨实例广播,需自行设计消息同步机制,否则可能影响多实例部署的可靠性。

升级与回退机制

通过 fetch 中的 server.upgrade(request) 实现 WebSocket 升级,未匹配的请求可返回 404。这种设计允许在同一服务器中同时处理普通 HTTP 请求和 WebSocket 连接,但需注意升级失败时的回退逻辑。示例中未升级的请求返回 404,开发者可根据实际需求自定义响应。

Q&A

如何在 Vercel 上启用 Bun 运行时?

在 vercel.json 中设置 "bunVersion": "1.x" 即可启用 Bun 运行时。

Bun.serve 在 Vercel Functions 中支持哪些路由类型?

支持静态路由(如 /api/boolean)、动态路由(如 /api/users/:id)和通配符路由(如 /*)。

如何在 Vercel 上使用 Bun.serve 处理 WebSocket 连接?

在 Bun.serve 中添加 websocket 处理器,并在 fetch 中调用 server.upgrade(request) 来升级匹配的请求。示例中,/ws 路径会升级为 WebSocket 连接,其他请求返回 404。

Vercel 上 WebSocket 连接的计费方式是什么?

WebSocket 连接运行在 Fluid 计算上,采用活跃 CPU 计费,只按处理消息的时间收费,空闲连接不收费。

Vercel 上 WebSocket 连接是否固定到单个实例?

是的,连接在其生命周期内固定到一个函数实例,单个实例可以处理多个并发连接。跨实例消息需要使用外部数据存储来协调。

Bun.serve 部署到 Vercel 时是否需要框架包装?

不需要,本地使用 Bun.serve 运行的服务器可以直接部署,无需框架包装。

🏷️

标签

➡️

继续阅读