---
title: "Протокол Tunnel"
description: "Брокер TunnelHub з native WSS, SSE та long-polling — живі інбокси й topic-канали"
locale: "uk"
---
# Протокол Tunnel

Realtime-шар Ring Platform: inbox на користувача (сповіщення, баланс) і topic-канали (чат, discovery, matcher).

- **Сервер:** `server.ts` — Next.js + native WSS (`/api/tunnel/ws`) при `RING_DEPLOY_TARGET=k8s|self-hosted`
- **Брокер:** `lib/tunnel/hub/` → `InMemoryTunnelHub` (+ Postgres fan-out decorator коли увімкнено)
- **Клієнт:** `TunnelProvider` / `useTunnelChannel` → WSS → SSE → poll
- **Reconnect:** `NativeWsClient` — backoff, heartbeat watchdog (force-close без `pong`), kick на `online` / `visibilitychange`

## Маршрути API

| Маршрут | Метод | Призначення |
|---------|-------|-------------|
| `/api/tunnel/ws` | WS | Native WebSocket (k8s/self-hosted) |
| `/api/tunnel/sse` | GET | SSE-потік |
| `/api/tunnel/token` | POST | JWT для tunnel auth |
| `/api/tunnel/poll` | GET/POST | Long-polling fallback |

## Конфігурація

```bash
RING_DEPLOY_TARGET=k8s
NEXT_PUBLIC_RING_DEPLOY_TARGET=k8s
# На однонодовому k3s-or: replicas=1 + TUNNEL_POSTGRES_FANOUT=disabled
# TUNNEL_POSTGRES_FANOUT=enabled  # лише з headroom для ≥2 подів
```

Повний гід (founder + developer) — [англійська версія](/en/docs/features/tunnel-protocol).
Smoke multi-replica (тимчасово): `bash scripts/ci/smoke-tunnel-postgres-fanout.sh`.
