Ciclo de eventos do Nginx
HTTP, WebSockets e E/S não bloqueante da base de dados partilham o ciclo de eventos do Nginx.
Backend centrado em SQL Alfa
Um módulo Rust para Nginx que expõe funções PostgreSQL por HTTP e envia notificações de alterações por WebSockets.
GitHubHTTP, WebSockets e E/S não bloqueante da base de dados partilham o ciclo de eventos do Nginx.
As instruções preparadas e o pipelining reduzem o trabalho repetido e as idas e voltas à base de dados.
O texto JSONB da resposta do PostgreSQL é transmitido sem alterações. Desativar a validação de saída também evita analisar o JSON da resposta.
A compilação com libpq modificado elimina cópias do corpo para Rust e libpq nos pedidos elegíveis. O empréstimo automático de buffers aplica-se a pedidos grandes elegíveis em ligações não cifradas à base de dados. As compilações padrão continuam a copiar.
O benchmark acima usou buffers copiados. As respostas e o TLS continuam a envolver cópias.
# 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;As funções SQL recebem e devolvem JSON. Tratam de consultas, regras de negócio e autorização.
Declare as funções que a sua API expõe. O pgxio verifica JWTs e chama cada função dentro de uma transação.
As subscrições WebSocket autorizadas sinalizam alterações. O cliente volta a obter o estado atual por HTTP.
As subscrições enviam sinais de alteração, não um registo duradouro de eventos. Ao voltar a ligar, os clientes subscrevem novamente e obtêm um estado atualizado.
Execute estes comandos a partir de uma cópia local do pgxio. Precisa de Docker Compose e Python 3.9 ou posterior.
O ambiente de desenvolvimento incluído escuta em localhost. O pgxio é software alfa; esta configuração destina-se à exploração local.
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 '{}'