Pętla zdarzeń Nginx
HTTP, WebSocket i nieblokujące operacje wejścia/wyjścia bazy danych współdzielą pętlę zdarzeń Nginx.
Backend oparty na SQL Alfa
Moduł Rust dla Nginx udostępniający funkcje PostgreSQL przez HTTP i powiadomienia o zmianach przez WebSocket.
GitHubHTTP, WebSocket i nieblokujące operacje wejścia/wyjścia bazy danych współdzielą pętlę zdarzeń Nginx.
Przygotowane instrukcje i przetwarzanie potokowe ograniczają powtarzaną pracę oraz liczbę wymian z bazą danych.
Tekst odpowiedzi JSONB z PostgreSQL jest przekazywany bez zmian. Wyłączenie walidacji wyjścia pozwala też uniknąć parsowania JSON odpowiedzi.
Wersja ze zmodyfikowaną libpq eliminuje kopie treści odpowiednich żądań do Rust i libpq. Automatyczne pożyczanie buforów dotyczy odpowiednich dużych żądań przez nieszyfrowane połączenia z bazą. Standardowe wersje nadal kopiują.
Powyższy test używał kopiowanych buforów. Odpowiedzi i TLS nadal wymagają kopii.
# 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;Funkcje SQL przyjmują i zwracają JSON. Obsługują zapytania, reguły biznesowe i autoryzację.
Zadeklaruj funkcje udostępniane przez API. pgxio sprawdza JWT i wywołuje każdą funkcję w transakcji.
Autoryzowane subskrypcje WebSocket sygnalizują zmiany. Klient ponownie pobiera aktualny obraz danych przez HTTP.
Subskrypcje dostarczają sygnały zmian, a nie trwały dziennik zdarzeń. Po ponownym połączeniu klienci odnawiają subskrypcje i pobierają świeży obraz danych.
Wykonaj te polecenia w istniejącej lokalnej kopii pgxio. Wymagane są Docker Compose i Python 3.9 lub nowszy.
Dołączone środowisko programistyczne nasłuchuje na localhost. pgxio jest w fazie alfa; ta konfiguracja służy do lokalnego poznawania projektu.
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 '{}'