You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloudflare Workers支持Websocket却不支持Raw TCP?无服务器架构疑问

解答你的Serverless相关疑问

问题1:为什么Serverless后端不允许TCP连接却支持WebSocket?

得先理清两个关键逻辑:

  • 像Cloudflare Workers这类基于V8 isolates的Serverless平台,核心诉求是启动快、资源占用极低、无状态运行。原始TCP连接需要维护长连接状态、占用操作系统套接字资源,和Serverless短生命周期、快速伸缩的特性完全冲突,所以平台直接禁用了自定义TCP连接的能力。
  • WebSocket虽然底层依赖TCP,但Serverless平台已经把WebSocket的底层逻辑全封装了:从TCP握手、连接维护到消息转发,都由平台统一处理。你在Worker里只需要处理WebSocket的上层消息(比如onmessage、onopen事件),不用直接操作TCP连接。相当于平台把TCP的复杂工作全包了,只给你开放了易用的WebSocket接口,所以你能正常用WebSocket,但不能自己建TCP连接。

问题2:Serverless后端如何与Serverful数据库(比如PostgreSQL)交互?

你看到的那段话点出了过去的核心矛盾:PostgreSQL默认用TCP连接,但Serverless平台不让直接用TCP。现在这个问题已经有了成熟的解决方案——Serverless数据库驱动,比如Neon推出的PostgreSQL Serverless Driver。

它的原理很直白:把原本基于TCP的PostgreSQL协议,转换成Serverless平台支持的HTTP/HTTPS请求。你在Worker里用这个驱动写数据库操作代码时,驱动会把SQL查询打包成HTTP请求发给数据库服务,数据库处理后再把结果通过HTTP响应返回给Worker,全程不用建立TCP长连接,完美适配Serverless环境。

举个极简的Cloudflare Worker示例(用Neon的驱动):

import { neon } from '@neondatabase/serverless';

export default {
  async fetch(request) {
    // 用Neon的Serverless连接字符串初始化驱动
    const sql = neon('你的Neon数据库连接字符串');
    // 执行SQL查询,底层是HTTP请求
    const rows = await sql('SELECT * FROM users LIMIT 5');
    return new Response(JSON.stringify(rows), { headers: { 'Content-Type': 'application/json' } });
  }
};

这样你就能在Serverless后端里正常操作传统的Serverful数据库了,不用再二选一。

原文引用:
"But there’s a problem. PostgreSQL connections are made over TCP. And modern serverless platforms like Cloudflare Workers or Vercel Edge Functions — based on V8 isolates — generally don’t talk TCP. So until now, you had an unfortunate choice. Serverless database or serverless compute: pick any one."

内容的提问来源于stack exchange,提问作者Nikhil Harisinghani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:50:24