Nginx 事件循环
HTTP、WebSocket 和非阻塞数据库 I/O 共用 Nginx 的事件循环。
以 SQL 为核心的后端 Alpha
一个用于 Nginx 的 Rust 模块,通过 HTTP 提供 PostgreSQL 函数,并通过 WebSocket 发送变更通知。
GitHubHTTP、WebSocket 和非阻塞数据库 I/O 共用 Nginx 的事件循环。
预备语句和流水线处理减少重复工作及数据库往返次数。
PostgreSQL 的 JSONB 响应文本原样转发。关闭输出验证还可避免解析响应 JSON。
带补丁的 libpq 构建对符合条件的请求消除向 Rust 和 libpq 复制请求体的操作。对于通过明文数据库连接发送的合格大型请求,会自动借用缓冲区。标准构建仍执行复制。
上述基准测试使用了复制缓冲区。响应和 TLS 仍涉及复制。
# HTTP endpoints
pgxio_endpoint list_tasks
web.list_tasks read_only;
pgxio_endpoint create_task
web.create_task;
# WebSocket subscription authorization
pgxio_stream tasks
web.authorize_tasks;SQL 函数接收并返回 JSON,负责查询、业务规则和授权。
声明 API 要公开的函数。pgxio 验证 JWT,并在事务内调用每个函数。
经授权的 WebSocket 订阅发出变更信号。客户端通过 HTTP 重新获取当前快照。
订阅提供的是变更信号,而非持久事件日志。重连后,客户端重新订阅并获取最新快照。
在已有的 pgxio 源码目录中执行这些命令。需要 Docker Compose 和 Python 3.9 或更新版本。
附带的开发环境绑定到 localhost。pgxio 处于 Alpha 阶段;此配置用于本地探索。
bin/pgxio init
bin/pgxio up
TOKEN=$(bin/pgxio token alice)
curl http://localhost:8080/v1/create_task \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"title":"Hello from pgxio"}'
curl http://localhost:8080/v1/list_tasks \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{}'