编写 HTTP 云函数
「HTTP 云函数」是专为 Web 服务场景设计的云函数类型,提供了原生 HTTP 支持、实时通信能力和多函数路由等特性。
💡 关于基础能力:本文聚焦 HTTP 云函数的特有能力(HTTP 处理、SSE、WebSocket、函数路由等)。如需了解云函数的通用能力(依赖安装、环境变量、时区处理等),请参考 编写普通云函数。
快速开始
- Node.js 创建指引
- Python 创建指引
第一步:创建函数入口文件
创建 index.js 作为 HTTP 函数入口文件:
exports.main = function (event, context) {
return `Hello world!`;
};
第二步:创建启动脚本(必需)
在项目根目录创建 scf_bootstrap 文件(无扩展名),内容为启动项目的命令:
#!/bin/bash
node index.js
启动脚本详情请参考:启动文件说明
项目结构
完整的项目目录结构如下:
my-web-function/
├── scf_bootstrap # 启动脚本(必需,无扩展名)
├── package.json # 项目配置
├── index.js # 函数入口文件
└── node_modules/ # 依赖包(npm install 后生成)
第一步:创建函数入口文件
创建 main.py 作为 HTTP 函数入口文件:
from http.server import HTTPServer, BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write(b'Hello World!')
if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 9000), Handler)
print('Server listening at http://localhost:9000')
server.serve_forever()
第二步:创建启动脚本(必需)
在项目根目录创建 scf_bootstrap 文件(无扩展名),内容为启动项目的命令:
#!/bin/bash
/var/lang/python3/bin/python3 main.py
启动脚本详情请参考:启动文件说明
项目结构
完整的项目目录结构如下:
python-http-function/
├── scf_bootstrap # 启动脚本(必需,无扩展名)
└── main.py # 函数入口文件
参考资源:
- 更多示例:示例代码仓库
- 模板代码:JavaScript 模板 | TypeScript 模板
- 完整快速开始教程:Functions Framework 快速开始
💡 提示:HTTP 云函数支持「函数路由」功能,允许多个子函数运行在同一个实例上。详见 HTTP 云函数路由。
函数结构与参数
HTTP 云函数支持直接使用 web 相关框架来进行开发,例如:Nodejs 环境下的 Express、Koa、NestJS,或 Python 环境下的 Flask、Django 等,或其他各语言的web框架。
函数路由
HTTP云函数支持web框架,因此可以通过对应的web框架进行实现多路由
也可以基于 @cloudbase/functions-framework 框架实现。它支持将一个大函数拆分成多个子函数,并通过请求路径将不同的请求路由到不同的处理函数。
请参考:HTTP 云函数路由
实时通信能力
HTTP 云函数提供两种实时通信方式:「SSE(Server-Sent Events)」和「WebSocket」。
SSE(Server-Sent Events)
「SSE」是一种基于 HTTP 的服务端推送技术,支持单向实时数据流传输(服务端 → 客户端)。
核心特点:
- 基于 HTTP 协议,兼容性好,默认支持无需配置
- 客户端自动重连
- 实现简单,资源占用低
- 适合 AI 对话流式输出、实时日志、进度更新等场景
详细文档:完整的 SSE 使用指南、消息格式规范、常见问题解决,请参考 SSE 协议支持。
WebSocket
「WebSocket」是一种全双工通信协议,支持双向实时通信(服务端 ↔ 客户端)。
核心特点:
- 双向实时通信,持久连接,低延迟
- 需要在控制台开启 WebSocket 协议支持
- 服务器必须监听 9000 端口
- 适合实时聊天、协作编辑、游戏服务器等场景
详细文档:完整的 WebSocket 使用指南、控制台配置步骤、使用限制、常见问题解决,请参考 WebSocket 协议支持。