Цикл подій Nginx
HTTP, WebSocket та неблокувальне введення-виведення бази даних використовують спільний цикл подій Nginx.
Бекенд на основі SQL Альфа
Модуль Rust для Nginx, який надає доступ до функцій PostgreSQL через HTTP і надсилає сповіщення про зміни через WebSocket.
GitHubHTTP, WebSocket та неблокувальне введення-виведення бази даних використовують спільний цикл подій Nginx.
Підготовлені запити та конвеєрна обробка зменшують повторну роботу й кількість обмінів із базою даних.
Текст відповіді JSONB від PostgreSQL передається без змін. Вимкнення перевірки вихідних даних також усуває розбір 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 перебуває на стадії альфа; ця конфігурація призначена для локального ознайомлення.
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 '{}'