Nginx 이벤트 루프
HTTP, WebSocket, 비차단 데이터베이스 I/O가 Nginx 이벤트 루프를 공유합니다.
SQL 중심 백엔드 알파
PostgreSQL 함수를 HTTP로 제공하고 WebSocket으로 변경 알림을 전달하는 Nginx용 Rust 모듈입니다.
GitHubHTTP, WebSocket, 비차단 데이터베이스 I/O가 Nginx 이벤트 루프를 공유합니다.
준비된 문장과 파이프라이닝으로 반복 작업과 데이터베이스 왕복 횟수를 줄입니다.
PostgreSQL의 JSONB 응답 텍스트를 그대로 전달합니다. 출력 검증을 끄면 응답 JSON 파싱도 생략합니다.
패치된 libpq 빌드는 조건에 맞는 요청에서 본문을 Rust와 libpq로 복사하는 작업을 없앱니다. 자동 버퍼 대여는 평문 데이터베이스 연결을 사용하는 조건에 맞는 큰 요청에 적용됩니다. 표준 빌드는 계속 복사합니다.
위 벤치마크는 복사되는 버퍼를 사용했습니다. 응답과 TLS에는 여전히 복사가 필요합니다.
# 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 함수는 JSON을 받고 반환합니다. 쿼리, 비즈니스 규칙, 권한 검사를 처리합니다.
API가 제공할 함수를 선언하세요. pgxio는 JWT를 확인하고 각 함수를 트랜잭션 안에서 호출합니다.
권한이 확인된 WebSocket 구독이 변경을 알립니다. 클라이언트는 HTTP로 현재 스냅샷을 다시 가져옵니다.
구독은 영구적인 이벤트 로그가 아닌 변경 신호를 전달합니다. 재연결 시 클라이언트는 다시 구독하고 최신 스냅샷을 가져옵니다.
기존 pgxio 소스 체크아웃에서 이 명령을 실행하세요. Docker Compose와 Python 3.9 이상이 필요합니다.
포함된 개발 환경은 localhost에 바인딩됩니다. pgxio는 알파 소프트웨어이며 이 설정은 로컬 탐색용입니다.
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 '{}'