Cloudflare 开发者周亮点:Worker API 支持 TCP 套接字
在最近的 Cloudflare 开发者周 上,Cloudflare 宣布推出 Worker API,支持创建出站 TCP 套接字。这一新的套接字 API 使开发者能够直接从 Worker 连接到基于 TCP 的基础设施,包括数据库。
新 API 功能
新的 connect() 函数作为运行时 API 提供,返回一个 TCP 套接字,允许开发者在连接保持打开的状态下读取和写入数据。此前,Worker 已经可以与 HTTP 端点和 Cloudflare 服务进行交互,但大多数数据库要求客户端通过直接打开 TCP 套接字进行连接。
技术背景与挑战
Cloudflare 产品经理 Brendan Irvine-Broque 和产品总监 Matt Silverlock 解释道,尽管 Cloudflare 的目标是尽可能支持跨浏览器和非浏览器环境的标准 API,但在 TCP 套接字方面面临了挑战,因为运行时环境缺乏明确的标准。他们尝试整合现有 API 和提案的最佳元素,并计划为未来标准做出贡献。
WinterCG 社区组
去年秋天,Cloudflare 与 Vercel 和 Shopify 共同启动了 WinterCG,这是一个新的社区组,专注于在非 Web 浏览器的 JavaScript 开发环境中实现标准化 Web API 的互操作性。
使用示例
新 API 通过从 *cloudflare:sockets* 导入 connect 函数来访问。一个常见的用例是创建与数据库的连接,例如使用 PostgreSQL 的 pg 驱动:
import { Client } from "pg";
export interface Env {
DB: string;
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext
): Promise<Response> {
const client = new Client(env.DB);
await client.connect();
const result = await client.query({
text: "SELECT * from customers",
});
console.log(JSON.stringify(result.rows));
const resp = Response.json(result.rows);
// Close the database connection, but don't block returning the response
ctx.waitUntil(client.end());
return resp;
},
};当前限制与未来计划
虽然 PostgreSQL 的 pg 驱动已经支持,但 MySQL 的 mysql 和 mysql2 驱动尚未支持。Irvine-Broque 和 Matt Silverlock 指出,每次请求都会创建一个新连接,这是无服务器函数连接数据库的普遍挑战。他们正在为最受欢迎的数据库开发更简单的连接池方法。
Cloudflare 还计划在未来增加更多功能,包括支持入站 TCP 和 UDP 连接,以及基于 QUIC 的应用协议。
其他新功能
除了 connect() API,Cloudflare 还在开发者周 2023 上宣布了其他新功能,包括:
- Secrets Store:用于安全管理应用密钥的解决方案。
- D1 改进:Cloudflare 的无服务器数据库。
- 消费者并发:消息服务 Queues 的改进。
- 针对 Neon、PlanetScale 和 Supabase 的 数据库集成。
开发者反馈
UpLeveled 创始人 Karl Horky 在 推特 上表示,不需要像 Neon 或其他无服务器/边缘提供商那样的代理,直接通过 TCP 连接,这听起来很棒,可能比最近的其他边缘数据库公告更有意义。
限制
每个打开的 TCP 套接字都会计入 Worker 中同时打开的最大连接数,且无法在端口 25 上创建 TCP 连接以发送电子邮件到 SMTP 邮件服务器。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。