Loop peristiwa Nginx
HTTP, WebSocket, dan I/O basis data nonblokir berbagi loop peristiwa Nginx.
Backend berpusat pada SQL Alfa
Modul Rust untuk Nginx yang menyediakan fungsi PostgreSQL melalui HTTP dan mengirim pemberitahuan perubahan melalui WebSocket.
GitHubHTTP, WebSocket, dan I/O basis data nonblokir berbagi loop peristiwa Nginx.
Pernyataan yang disiapkan dan pipelining mengurangi pekerjaan berulang serta perjalanan bolak-balik ke basis data.
Teks respons JSONB dari PostgreSQL diteruskan tanpa perubahan. Menonaktifkan validasi keluaran juga menghindari penguraian JSON respons.
Build dengan libpq yang ditambal menghilangkan salinan isi permintaan ke Rust dan libpq untuk permintaan yang memenuhi syarat. Peminjaman buffer otomatis berlaku untuk permintaan besar yang memenuhi syarat melalui koneksi basis data tanpa enkripsi. Build standar tetap menyalin.
Uji di atas memakai buffer yang disalin. Respons dan TLS masih melibatkan salinan.
# 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;Fungsi SQL menerima dan mengembalikan JSON. Fungsi menangani kueri, aturan bisnis, dan otorisasi.
Deklarasikan fungsi yang disediakan API. pgxio memeriksa JWT dan memanggil setiap fungsi di dalam transaksi.
Langganan WebSocket yang diotorisasi memberi sinyal perubahan. Klien mengambil ulang snapshot terkini melalui HTTP.
Langganan mengirim sinyal perubahan, bukan log peristiwa permanen. Saat tersambung kembali, klien berlangganan ulang dan mengambil snapshot terbaru.
Jalankan perintah ini dari salinan sumber pgxio yang sudah ada. Diperlukan Docker Compose dan Python 3.9 atau lebih baru.
Lingkungan pengembangan yang disertakan mendengarkan di localhost. pgxio adalah perangkat lunak alfa; konfigurasi ini untuk eksplorasi lokal.
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 '{}'