Bucle de eventos de Nginx
HTTP, WebSockets y la E/S no bloqueante de la base de datos comparten el bucle de eventos de Nginx.
Backend centrado en SQL Alfa
Un módulo de Rust para Nginx que expone funciones de PostgreSQL por HTTP y envía avisos de cambios por WebSockets.
GitHubHTTP, WebSockets y la E/S no bloqueante de la base de datos comparten el bucle de eventos de Nginx.
Las sentencias preparadas y el uso de pipelines reducen el trabajo repetido y los viajes de ida y vuelta a la base de datos.
El texto JSONB de la respuesta de PostgreSQL pasa sin cambios. Desactivar la validación de salida también evita analizar el JSON de la respuesta.
La compilación con libpq modificado elimina las copias del cuerpo de la solicitud a Rust y libpq en las solicitudes aptas. El préstamo automático de búferes se aplica a solicitudes grandes aptas sobre conexiones sin cifrar a la base de datos. Las compilaciones estándar siguen copiando.
La prueba anterior usó búferes copiados. Las respuestas y TLS siguen requiriendo copias.
# 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;Las funciones SQL reciben y devuelven JSON. Se encargan de las consultas, las reglas de negocio y la autorización.
Declara las funciones que expone tu API. pgxio verifica los JWT y llama a cada función dentro de una transacción.
Las suscripciones autorizadas por WebSocket avisan de los cambios. El cliente vuelve a obtener la instantánea actual por HTTP.
Las suscripciones envían avisos de cambios, no un registro duradero de eventos. Al reconectarse, los clientes se vuelven a suscribir y obtienen una instantánea nueva.
Ejecuta estos comandos desde una copia local de pgxio. Necesitas Docker Compose y Python 3.9 o posterior.
El entorno de desarrollo incluido escucha en localhost. pgxio es software alfa; esta configuración sirve para probarlo localmente.
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 '{}'