Ne işe yarar (iş diliyle)
Etkinlikte “an”a duyarlı görseller / dashboard’lar için temel altyapı. Bir izleyici formu gönderdiğinde, sahne ekranındaki sayaç anında artar; admin panelinde yeni kelime listelenir. Periyodik refresh ile değil, gerçek-zamanlı push ile — gecikme algılanmaz, “etkinlik anı dramatik etki” oluşur.
Hangi müşteri/projelerde işe yarar
- Konferans / panel canlı oylama → sahne ekranında bar grafik anında büyür
- Müzayede / açık artırma teklif akışı
- Müşteri panik butonu / saha izleme
- IoT sensör dashboard (sıcaklık, doluluk, basınç)
- Çağrı merkezi monitör (queue / aktif çağrı sayısı)
- Spor etkinliği skor / istatistik canlı yayın
- Açılış / lansman geri sayım + katılım sayacı
Nasıl çalışır (kısa, sade)
Server bir WebSocket endpoint açar (örn. /ws/event/:slug). Client (admin paneli) buraya bağlanır
ve “şu etkinliğin akışını dinliyorum” abonesi olur. Yeni bir submission/oylama/ölçüm geldiğinde
server o etkinliğin tüm abonelerine küçük bir JSON mesajı yayınlar (type: word_update, ilgili
veri). Client mesajı alır, local store’unu günceller, UI rerender olur. Pub/sub map’i memory’de
tutulur; multi-instance ölçek için Redis pub/sub’a yükseltilebilir.
Olgunluk
canlida-kanitlanmis. Tek instance Coolify deploy’da sahada çalışıyor. Multi-instance veya yüksek ölçek için Redis pub/sub adapter eklemek küçük bir refactor.
Teknik (geliştiriciler için)
- Kod:
server/src/lib/websocket.ts(subscribe,unsubscribe,subscriberCount— eventId bazlı in-memory pub/sub map’i),server/src/index.ts(Hono WS upgrade),src/lib/use-event-stream.ts(client reconnect logic),src/store/poster-store.ts(applyWordUpdate,applyWordPatch,applyWordDeletereducer’ları). - Mesaj formatı: JSON
{ type, aggregateId, displayWord?, count?, patch? }. - Bağımlılık:
@hono/node-ws(Node WS adapter). - Sınırlar:
- Coolify Traefik arkasında WS proxy timeout + sticky session konfigüre edilmeli (uzun etkinlikte reconnect fırtınası riski).
- Auth katmanı yok — public event scope, admin token kontrolü eklenmeli production-kritik yayınlar için.
- Client reconnect basit (basit retry), exponential backoff yok; ağır ağ ortamında geliştirilebilir.
- In-memory pub/sub → multi-instance scale için Redis pub/sub bridge gerekir.