SignalR dahili olarak nasıl yüksek seviyede çalıştığını bilebilir mi?
Sanırım veri kullanarak veri kızartıyor Response.Flush
ve istemci tarafında belirli aralıklarla Ajax istekleri gönderiyor. Doğru mu?
SignalR dahili olarak nasıl yüksek seviyede çalıştığını bilebilir mi?
Sanırım veri kullanarak veri kızartıyor Response.Flush
ve istemci tarafında belirli aralıklarla Ajax istekleri gönderiyor. Doğru mu?
Yanıtlar:
Hayır, SignalR bir bağlantı üzerinden soyutlamadır. Bu bağlantı üzerinden iki programlama modeli sunar (hub'lar ve kalıcı bağlantılar). SignalR bir taşıma konseptine sahiptir, her taşımada verilerin nasıl gönderileceği / alınacağı ve nasıl bağlanacağı ve kesileceği kararlaştırılır.
SignalR'de birkaç dahili taşıma vardır:
SignalR, sunucu ve istemci tarafından desteklenen "en iyi" bağlantıyı seçmeye çalışır (ayrıca belirli bir aktarımı kullanmaya zorlayabilirsiniz).
Bu yüksek seviye. Her aktarımın nasıl uygulandığını görmek istiyorsanız kaynak koduna bakabilirsiniz .
Ayrıca her aktarım için müşteri kodu da vardır: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Uzun oylama taşımacılığının özellikle nasıl çalıştığını soruyorsanız:
Sunucuya, bir sinyalin yanıt vermesini asenkron olarak bekleyen bir ajax isteği gönderir. Bir sinyal olduğunda veya istek zaman aşımına uğradığında, sunucudan döner ve başka bir istek gönderir ve işlem devam eder. (İstemcinin gördüklerini nasıl takip ettiğini, böylece mesajları kaçırmaması hakkında bazı detayları bıraktım)
Umarım bu sorunuzun çoğuna cevap verir.
@davidfowl büyük bölümü zaten yanıtladı. Bununla birlikte, özellikle WebSocket ve diğer taşımacılar arasındaki taşımacılığın davranışlarındaki farklılık hakkında daha fazla ayrıntı sağlamak; bazı noktalar aşağıdadır.