WebSocket bağlantılarım belli bir süre sonra kopuyor; ne yapmalıyım?
Kısa cevap
WebSocket bağlantısı kurulduktan sonra TR7 onu tünel olarak taşır; iki yönde de veri geçmezse Timeouts profilindeki Tunnel(Websocket) Timeout (varsayılan 120 saniye) dolunca bağlantı kapanır. Tünelde Client Timeout ve Server Timeout belirleyici değildir. Çözüm, Tunnel(Websocket) timeout değeri uygulamanın ping/pong aralığından büyük olan bir Timeouts profili oluşturup vService'e atamaktır; uygulama tarafında bu süreden kısa aralıklarla ping göndermek de bağlantıyı açık tutar (WebSocket ve uzun süreli bağlantılar).
Sorun: Boşta Kalan WebSocket Bağlantıları Kopuyor
Bildirim, sohbet ya da canlı panel gibi uygulamalarda WebSocket bağlantısı uzun süre veri taşımadan açık kalır. Bağlantılar hep aynı süre sonra kopuyorsa ve istemci yeniden bağlanmak zorunda kalıyorsa boşta kalma süresi sınırı dolmaktadır. Kopan bağlantının nedeni, HTTP vService Debug mode durumundayken Debug Mode Logs ekranındaki Termination State kolonunda görülür.
Çözüm: Üç Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| Tünel süresini arayüzden artırmak | Yöntem 1: Tunnel(Websocket) timeout profili |
| Uygulama ping gönderebiliyor | Yöntem 2: Uygulama tarafı ping/pong |
| Komut satırından | Yöntem 3: WEB-CLI |
Yöntem 1: Tunnel(Websocket) Timeout Profili Önerilen
- Nasıl çalışır Tünel hâlindeki bağlantının boşta kalabileceği süre artırılır.
- Nerede açılırLoad Balancer → Profiles → Timeouts · vService → Details → Timeout
- Gereksinim Uygulamanın ping/pong aralığının bilinmesi
- vService tipi HTTP · L7 TCP (L7 TCP'de HTTP Keepalive Timeout ve HTTP Request Timeout kullanılmaz)
Adım adım yapılandırma
Load Balancer → Profiles → Timeouts → Add tıklanır (nasıl eklenir). WebSocket için ayrı profil önerilir (operasyonel en iyi uygulamalar).
Name alanına profil adı yazılır (ör. websocket-servisi).
Tunnel(Websocket) Timeout uygulamanın ping/pong aralığından büyük bir değere ayarlanır (ör. 3600). Değerler saniyedir (0–60.000); boş bırakılan alanlar varsayılanı kullanır.
Add tıklanır.
Load Balancer → Load Balancer vService List → vService → Edit; Details panelinde Timeout kutusu işaretlenir ve listeden profil seçilir (vService'e nasıl eklenir).
Save tıklanır. Timeouts değişiklikleri açık bağlantılar kopmadan uygulanır. Cluster'da varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
WebSocket bağlantısı açılır ve eski süreden uzun, yeni süreden kısa bir süre veri gönderilmeden bekletilir.
Bağlantı açık kalırYöntem 2: Uygulama Tarafı Ping/Pong
- Nasıl çalışır Uygulama belirli aralıklarla ping gönderdiğinde bağlantı boşta sayılmaz ve tünel süresi dolmaz.
- Nerede açılır Uygulamanın (istemci ya da sunucu) WebSocket ayarları
- Gereksinim Uygulamanın ping/pong desteği
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Uygulamanın ping aralığı Tunnel(Websocket) timeout değerinden kısa tutulur (ör. 120 saniyelik süre için 30 saniye).
Doğrulama
WebSocket bağlantısı açılır ve uygulama verisi gönderilmeden Tunnel(Websocket) timeout süresinden uzun bekletilir.
Bağlantı açık kalırYöntem 3: WEB-CLI
- Nasıl çalışır Profil komut satırından oluşturulup vService'e bağlanır.
- Nerede açılır TR7 WEB-CLI →
lb timeouts·lb service - Gereksinim WEB-CLI erişimi
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Değer saniyedir (Timeouts örnekleri):
lb timeouts add name websocket-servisi --tunnelTimeout 3600lb service update id <vService> --timeout websocket-servisiDoğrulama
WebSocket bağlantısı açılır ve eski süreden uzun, yeni süreden kısa bir süre veri gönderilmeden bekletilir.
Bağlantı açık kalırSık Yapılan Hatalar
- Client ve Server timeout'u artırmak. Tünel kurulduktan sonra belirleyici süre Tunnel(Websocket) timeout'tur.
- Süreyi ping aralığından kısa tutmak. Tünel süresi dolmadan ping gelmezse bağlantı kopar; tünel süresi ping aralığından uzun seçilir.
- Bağlanamama sorununu kopma sanmak. Çok sayıda eşzamanlı WebSocket, vService Limits profilindeki Max. Total Connections (varsayılan 20.000) ya da
wss://için Max. Total SSL Connections (varsayılan 5.000) sınırına ulaşırsa yeni bağlantılar bekler; mevcut bağlantılar kopmaz (Bağlantı limitine ulaşıldığında ne olur?). - WebSocket kurulumunu gözden kaçırmak. vService tipi ve Upgrade doğrulaması için: WebSocket trafiği için yük dengeleme yapabilir miyim?
Dokümantasyonda nasıl yapılır
İlgili sorular
- WebSocket trafiği için yük dengeleme yapabilir miyim?
- Timeouts profilindeki değerler (HTTP Keepalive Timeout, HTTP Request Timeout, Connect, Server, Client, Queue, Tunnel(Websocket) Timeout, Client FIN, Server FIN) ne anlama gelir?
- Uzun süren işlemlerde (rapor, dosya yükleme) istek neden yarıda kesiliyor; hangi timeout'u artırmalıyım?
