Boucle événementielle Nginx
HTTP, WebSockets et les E/S non bloquantes de la base partagent la boucle événementielle de Nginx.
Backend centré sur SQL Alpha
Un module Rust pour Nginx qui expose des fonctions PostgreSQL via HTTP et transmet des notifications de changement par WebSockets.
GitHubHTTP, WebSockets et les E/S non bloquantes de la base partagent la boucle événementielle de Nginx.
Les instructions préparées et le pipelining réduisent le travail répété et les allers-retours vers la base.
Le texte JSONB renvoyé par PostgreSQL est transmis tel quel. Désactiver la validation de sortie évite aussi l'analyse du JSON de réponse.
La compilation avec libpq modifié supprime les copies du corps vers Rust et libpq pour les requêtes admissibles. L'emprunt automatique s'applique aux grandes requêtes admissibles sur des connexions non chiffrées à la base. Les compilations standard conservent les copies.
Les mesures ci-dessus utilisent des tampons copiés. Les réponses et TLS impliquent toujours des copies.
# 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;Les fonctions SQL reçoivent et renvoient du JSON. Elles gèrent les requêtes, les règles métier et les autorisations.
Déclarez les fonctions exposées par votre API. pgxio vérifie les JWT et appelle chaque fonction dans une transaction.
Les abonnements WebSocket autorisés signalent les changements. Le client récupère ensuite l'instantané actuel via HTTP.
Les abonnements transmettent des signaux de changement, pas un journal persistant. Après reconnexion, les clients se réabonnent et récupèrent un nouvel instantané.
Exécutez ces commandes depuis une copie locale de pgxio. Docker Compose et Python 3.9 ou ultérieur sont nécessaires.
L'environnement de développement fourni écoute sur localhost. pgxio est en version alpha ; cette configuration sert à l'exploration locale.
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 '{}'