Цикл событий 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 '{}'