Nginx-Ereignisschleife
HTTP, WebSockets und nicht blockierende Datenbank-E/A teilen sich die Ereignisschleife von Nginx.
SQL-zentriertes Backend Alpha
Ein Rust-Modul für Nginx, das PostgreSQL-Funktionen über HTTP bereitstellt und Änderungen über WebSockets meldet.
GitHubHTTP, WebSockets und nicht blockierende Datenbank-E/A teilen sich die Ereignisschleife von Nginx.
Vorbereitete Anweisungen und Pipelining reduzieren wiederholte Arbeit und Datenbank-Roundtrips.
Der JSONB-Antworttext von PostgreSQL wird unverändert weitergereicht. Bei deaktivierter Ausgabevalidierung entfällt auch das Parsen des Antwort-JSON.
Der Build mit gepatchtem libpq vermeidet bei geeigneten Anfragen das Kopieren des Anfragekörpers in Rust und libpq. Automatisches Ausleihen greift bei geeigneten großen Anfragen über unverschlüsselte Datenbankverbindungen. Standard-Builds kopieren weiterhin.
Der obige Benchmark verwendete kopierte Puffer. Antworten und TLS erfordern weiterhin Kopien.
# 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-Funktionen nehmen JSON an und geben JSON zurück. Sie übernehmen Abfragen, Geschäftsregeln und Autorisierung.
Deklarieren Sie die Funktionen Ihrer API. pgxio prüft JWTs und ruft jede Funktion innerhalb einer Transaktion auf.
Autorisierte WebSocket-Abonnements melden Änderungen. Ihr Client lädt den aktuellen Snapshot erneut über HTTP.
Abonnements liefern Änderungssignale, kein dauerhaftes Ereignisprotokoll. Nach einer erneuten Verbindung abonnieren Clients erneut und laden einen frischen Snapshot.
Führen Sie diese Befehle aus einem vorhandenen pgxio-Checkout aus. Sie benötigen Docker Compose und Python 3.9 oder neuer.
Der enthaltene Entwicklungsstack bindet an localhost. pgxio ist Alpha-Software; diese Konfiguration dient dem lokalen Ausprobieren.
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 '{}'