Loop de eventos do Nginx
HTTP, WebSockets e E/S não bloqueante do banco compartilham o loop 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 mudanças por WebSockets.
GitHubHTTP, WebSockets e E/S não bloqueante do banco compartilham o loop de eventos do Nginx.
Instruções preparadas e pipelining reduzem o trabalho repetido e as idas e voltas ao banco.
O texto JSONB da resposta do PostgreSQL é repassado 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 nas requisições elegíveis. O empréstimo automático de buffers se aplica a requisições grandes elegíveis em conexões sem criptografia com o banco. As compilações padrão continuam copiando.
O benchmark acima usou buffers copiados. Respostas e TLS ainda envolvem 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 retornam JSON. Elas cuidam das consultas, regras de negócio e autorização.
Declare as funções que sua API expõe. O pgxio verifica JWTs e chama cada função dentro de uma transação.
Assinaturas WebSocket autorizadas sinalizam mudanças. Seu cliente busca novamente o estado atual por HTTP.
As assinaturas enviam sinais de mudança, não um registro durável de eventos. Ao reconectar, os clientes assinam novamente e buscam um estado atualizado.
Execute estes comandos de uma cópia local do pgxio. Você precisa de Docker Compose e Python 3.9 ou mais recente.
O ambiente de desenvolvimento incluído escuta em localhost. O pgxio é software alfa; esta configuração serve para 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 '{}'