TCP Half-Open Connections

· Özellikler

Bağlantı kurulduktan sonra, hiçbir taraf veri göndermezse ağ üzerinden hiçbir paket gönderilmez. TCP atıl bir protokoldür, bu nedenle bağlantının etkin olduğunu varsayar.

Bağlantı kesilme nedenleri

Yarı Açık Bağlantı Kesilmelerini Algılama 

Bağlantı kesilmelerini aşağıdaki yöntemleri kullanarak algılamayı deneyebilirsiniz 

İkinci Bağlantı

İkinci bir bağlantı açıp bağlanmayı deneyebilirsiniz, ancak bunun bazı dezavantajları vardır; daha fazla kaynak tüketirsiniz, yeni thread'ler oluşturursunuz... ve karşı taraf yeniden başlatıldıysa ikinci bağlantı çalışır ama ilki çalışmaz.

Karşı tarafa ping gönderme

Yarı açık bir bağlantıyla ping veya herhangi bir mesaj göndermeyi denerseniz, hiçbir hata almadığınızı göreceksiniz.

TCP Soket düzeyinde KeepAlive'ı etkinleştirme

Bir TCP keep-alive paketi, sıra numarası bağlantının geçerli sıra numarasından bir eksiğe ayarlanmış basit bir ACK'tir. Bu ACK'lerden birini alan bir ana bilgisayar, geçerli sıra numarası için bir ACK ile yanıt verir. Keep-alive paketleri, bir bağlantının uzak ucundaki bilgisayarın hâlâ kullanılabilir olduğunu doğrulamak için kullanılabilir. TCP keep-alive paketleri, TCP bağlantısı üzerinden başka veri veya üst düzey keep-alive taşınmadıysa her TCPKeepAlive.Time süresinde bir (varsayılan 7.200.000 milisaniye veya iki saat) gönderilebilir. Bir keep-alive'a yanıt yoksa, her TCPKeepAlive.Interval saniyede bir tekrarlanır. KeepAliveInterval varsayılan olarak 1000 milisaniyedir.

Bağlantı başına KeepAlive'ı etkinleştirebilir ve TCP protokolünün bağlantının etkin olup olmadığını denetlemesine izin verebilirsiniz. Kopan bağlantıları algılamak istiyorsanız (örneğin: bir ağ kablosunu çıkardığınızda) tercih edilen yöntem budur. sgcWebSockets 4.3.7 sürümünden itibaren bu yarı açık bağlantıları algılamayı denemek için TCPKeepAlive özelliğini etkinleştirebilirsiniz.

oClient := TsgcWebSocketClient.Create(nil);
oClient.TCPKeepAlive.Enabled := True;
oClient.TCPKeepAlive.Time := 3000;
oClient.TCPKeepAlive.Interval := 1000;