📡 WebSocket Mimarisi (7 Bağlantı)
4 internal FVT WS + 3 external (Binance + Matriks rt/dl)
🌐 7 WebSocket Bağlantı
📥 Internal (NEXT_PUBLIC_*) — 4 adet
| ENV Var | URL Pattern | Amaç |
|---|---|---|
NEXT_PUBLIC_WS_URL | wss://fvt.com.tr/... | Genel (notification, domain events) |
NEXT_PUBLIC_CHAT_WS_URL + PATH | wss://fvt.com.tr/chat | Canlı yayın sohbeti |
NEXT_PUBLIC_GUESS_WS_URL + PATH | wss://fvt.com.tr/guess | t-Chat 115 fon T+1 tahmin |
NEXT_PUBLIC_STOCK_WS_URL | wss://fvt.com.tr/stock | BIST hisse + endeks real-time |
🌍 External — 3 adet
| WS | URL | Provider |
|---|---|---|
| Binance | wss://stream.binance.com:9443/stream?streams=... | Kripto (direct) |
| Matriks RT | wss://rt.radix.matriksdata.com:443/market | BIST real-time (PRO, JWT RS256 30dk) |
| Matriks DL | wss://dl.radix.matriksdata.com:443/market | BIST delayed (anonim) |
⚡ WebSocket Events
Connection Lifecycle (Standard)
connect, disconnect, connect_error
reconnect_attempt, message, error, close
data, drain, end, finish, abort, aborted
hata // Türkçe!
FVT Generic Events
| Event | Payload | Use Case |
|---|---|---|
subscribe | { symbols: [...] } | Sembol takibi başlat |
unsubscribe | { symbols: [...] } | Takibi durdur |
snapshot | { symbols, prices } | İlk yükleme |
data_update | { symbol, price, change } | Real-time tick |
kap_update | { hisseKodu, aciklama } | KAP haber |
nextday_update | { fonKodu, tahmin } | Fon T+1 NAV |
🔥 CQRS Domain Events (4)
| Event | Tetikleyici | Subscribed By |
|---|---|---|
dividend:changed | Temettü dağıtım günü | Wallet, Portföy, Bildirim |
portfolio:changed | Pozisyon değişti (trade veya fiyat) | Portföy, Sidebar, Cüzdan |
target:changed | Hedef dağılım veya rebalance | Portföy Analiz, Rebalance UI |
trade:changed | Yeni al/sat işlemi | İşlem geçmişi, Wallet, Analyze |
Matriks Raw Protocol
packet, packetreceive, packetsend, binder
🔄 WebSocket Akış Diyagramı
[Sayfa açılır]
│
▼
[Tab Leader Election (BroadcastChannel)]
│
├─ Bu tab LEADER mı?
│ │
│ ▼
│ [WS connect]
│ │
│ ▼
│ emit('subscribe', { symbols: ['THYAO', 'AAPL', 'BTCUSDT'] })
│ │
│ ▼
│ on('snapshot') → ilk fiyatlar
│ │
│ ▼
│ on('data_update') → her tick
│ │
│ ▼
│ [BroadcastChannel post] → diğer tab'lar
│
└─ NOT leader → BroadcastChannel listener
│
▼
Tüm tab'larda eş zamanlı update
🔐 Matriks JWT Detay
Header: { "alg": "RS256", "typ": "JWT" }
Payload: {
"iss": "YEFLABSDLYD", ← YEF Labs Delayed
"exp": 1779672524, ← 30dk sonra
"iat": 1779654524,
"nbf": 1779654494,
"id": "639152621241139854",
"sub": "YFL-FVT_GUEST_ANON", ← Anonim
"cli": "W"
}
PRO için:
- Issuer:
YEFLABSRT(real-time muhtemel) - Subject:
YFL-FVT_PRO_{user_id} - Broker:
rt.radix.matriksdata.com - Refresh: 30dk-1sa muhtemel
🔌 Binance WS Pattern
Single stream:
wss://stream.binance.com:9443/ws/btcusdt@trade
wss://stream.binance.com:9443/ws/btcusdt@kline_1m
Multi stream (FVT muhtemelen):
wss://stream.binance.com:9443/stream?streams=btcusdt@trade/ethusdt@trade
Response:
{ stream: "btcusdt@trade", data: { p: "76733.76", q: "0.001", ... } }
🎯 Sayfa Bazlı WS Subscriptions
| Sayfa | WS Connections |
|---|---|
| /hisseler/yerli/THYAO | Stock WS (subscribe THYAO) |
| /portfoy/{id} | Stock WS (subscribe all positions) + User WS (domain events) |
| /canli-yayin | Chat WS (sohbet) + Q&A |
| /t-chat | Guess WS (115 fon predictions) |
| /akis | Social WS (post:new, trend update) |
| /kripto/BTC | Binance WS direct (btcusdt@trade) |
| /terminal | Stock WS + Matriks RT (PRO) — multi widget |
⚡ Multi-Tab Optimization
📡 Tab Leader Pattern
Tek tab WS dinler, diğer tab'lar BroadcastChannel('fvt-ws-events') üzerinden veri alır.Bu sayede 10 tab açıksa bile 1 WS connection.
📊 PostHog Multi-Window Dedup
sessionStorage: ph_phc_..._primary_window_exists ← TRUE/FALSE
Sadece 1 tab session recording yapıyor → bandwidth tasarrufu