Bagaimana SignalR bekerja secara internal?

160

Adakah yang bisa memberi tahu saya bagaimana SignalR bekerja secara internal dengan cara tingkat tinggi?

Saya menduga itu adalah pembilasan data menggunakan Response.Flushdan di sisi klien mengirim permintaan Ajax pada interval tertentu. Apakah itu benar?

pengguna960567
sumber
13
@dfowler melakukan wawancara dengan Scott Hansleman baru-baru ini, hanselminutes.com/291/ yang sangat informatif .
Diselaraskan
1
Artikel bagus tentang arsitektur sinyal r dan cara kerjanya Lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh
Saya tahu ini sudah lama tapi microsoftvirtualacademy.com/Content/…
lordkain
1
Juga lihat presentasi ini di NDC 2013 dari David Fowler dan Damian Edwards yang disebut 'Under the cover with ASP.NET SignalR' di mana mereka membangun versi lite SignalR langsung di atas panggung. Ini sangat informatif. Ini pra 2.0 tapi itu seharusnya tidak masalah. vimeo.com/68383353
Johan B

Jawaban:

241

Tidak, SignalR adalah abstraksi atas suatu koneksi. Ini memberi Anda dua model pemrograman melalui koneksi itu (hub dan koneksi persisten). SignalR memiliki konsep transportasi, masing-masing transportasi memutuskan bagaimana data dikirim / diterima dan bagaimana menghubungkan dan memutuskan sambungan.

SignalR memiliki beberapa transportasi bawaan:

  1. Soket Web
  2. Server Terkirim Acara
  3. Bingkai selamanya
  4. Polling panjang

SignalR mencoba untuk memilih koneksi "terbaik" yang didukung oleh server dan klien (Anda juga dapat memaksanya untuk menggunakan transportasi tertentu).

Itu level tinggi. Jika Anda ingin melihat bagaimana setiap transportasi diimplementasikan, Anda dapat melihat kode sumbernya .

Ada juga kode klien untuk setiap transportasi: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Jika Anda bertanya tentang bagaimana transportasi pemungutan suara panjang bekerja khususnya:

Ini mengirimkan permintaan ajax ke server yang menunggu sinyal untuk merespons secara tidak sinkron. Ketika ada sinyal atau permintaan habis, itu kembali dari server dan mengirimkan permintaan lain dan proses berlanjut. (Saya meninggalkan beberapa detail tentang bagaimana klien melacak apa yang dilihatnya sehingga tidak ketinggalan pesan)

Semoga itu menjawab sebagian besar pertanyaan Anda.

davidfowl
sumber
3
dapatkah Anda memberi tahu saya berapa banyak koneksi yang dapat didukung pada satu waktu?
Farhad-Taran
1
Mengenai berapa banyak koneksi yang akan didukung Signalr tergantung pada batas permintaan IIS. Itu dapat ditingkatkan menggunakan entri konfigurasi atau skrip shell. Biasanya Signalr cache 1000 connectiosn dalam memori.
Thanigainathan
1
Seperti yang telah disebutkan, batas reli ada di tingkat server. Damnien Edwards (co-pencipta SignalR) telah mendapat 150.000 koneksi dari server 10GB tunggal: twitter.com/DamianEdwards/status/486642486350061568
LDJ
jawaban untuk pertanyaan ini stackoverflow.com/q/40906789/3565879
Technacron
@davidfowl tolong beri jawaban untuk stackoverflow.com/questions/47504489/…
Hitesh Thakor
5

@davidfowl telah menjawab bagian utama. Namun, untuk memberikan beberapa rincian lebih lanjut mengenai perbedaan perilaku transportasi, khususnya antara WebSocket dan transportasi lainnya; di bawah ini adalah beberapa poin.

  • WebSocket adalah satu-satunya transportasi yang membuat koneksi dua arah yang persisten dan sejati antara klien dan server. Namun, WebSocket hanya didukung oleh IIS 8 atau lebih baru, dan versi terbaru dari Internet Explorer, Google Chrome dan Mozilla Firefox.
  • Sementara Server Mengirim Acara, Bingkai Selamanya, dan Polling Panjang, ketiganya mengikuti komunikasi satu arah, dan didukung oleh sebagian besar browser.
shivam
sumber