it-swarm-id.com

Bagaimana SignalR bekerja secara internal?

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

Saya kira itu pembilasan data menggunakan Response.Flush dan di sisi klien mengirimkan permintaan Ajax pada interval tertentu. Apakah itu benar?

154
user960567

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

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 secara tidak bersamaan sinyal untuk merespons. 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.

233
davidfowl

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

  • WebSocket adalah satu-satunya transportasi yang membangun koneksi dua arah yang persisten dan benar antara klien dan server. Namun, WebSocket hanya didukung oleh IIS 8 atau lebih tinggi, 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.
2
shivam