SignalR dahili olarak nasıl çalışır?


160

SignalR dahili olarak nasıl yüksek seviyede çalıştığını bilebilir mi?

Sanırım veri kullanarak veri kızartıyor Response.Flushve istemci tarafında belirli aralıklarla Ajax istekleri gönderiyor. Doğru mu?


13
@dfowler yakın zamanda Scott Hansleman ile röportaj yaptı, bu çok bilgilendirici hanselminutes.com/291/… .
Bağlantısızlar

1
Sinyal r mimarisi ve nasıl çalıştığı hakkında güzel bir makale lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh

Çok uzun zaman önce biliyorum ama microsoftvirtualacademy.com/Content/…
lordkain

1
Ayrıca David Fowler ve Damian Edwards'dan NDC 2013'te 'ASP.NET SignalR ile örtü altında' adlı bu sunumu sahnede canlı bir SignalR sürümü oluşturdukları yere bakın. Çok bilgilendirici. 2.0 öncesi ama çok önemli değil. vimeo.com/68383353
Johan B

Yanıtlar:


241

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:

  1. WebSockets
  2. Sunucu Gönderilen Olaylar
  3. Sonsuza Kadar Çerçeve
  4. Uzun oylama

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.


3
bir seferde kaç bağlantıyı destekleyebileceğini söyleyebilir misiniz?
Farhad-Taran

1
Signalr'ın kaç bağlantıyı destekleyeceği konusunda IIS'nin istek sınırına bağlıdır. Yapılandırma girişleri veya kabuk komut dosyaları kullanılarak artırılabilir. Genellikle Signalr bellekte 1000 connectiosn önbelleğe alır.
Thanigainathan

1
Daha önce de belirtildiği gibi, limit ralli sunucu düzeyinde. Damnien Edwards (SignalR'ın yaratıcısı) tek bir 10GB sunucusundan 150.000 bağlantıya sahip: twitter.com/DamianEdwards/status/486642486350061568
LDJ

bu soruya herhangi bir cevap stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl Bunun cevabı veriniz stackoverflow.com/questions/47504489/...
Hitesh Thakor

5

@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.

  • WebSocket, istemci ve sunucu arasında gerçek kalıcı, iki yönlü bir bağlantı kuran tek aktarımdır. Ancak, WebSocket yalnızca IIS 8 veya üstü ve Internet Explorer, Google Chrome ve Mozilla Firefox'un en son sürümleri tarafından desteklenir.
  • Sunucu Gönderilen Olaylar, Sonsuza Kadar Çerçeve ve Uzun yoklama, üçü de tek yönlü bir iletişim izler ve tarayıcıların çoğu tarafından desteklenir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.