Làm thế nào SignalR hoạt động nội bộ?


160

Bất cứ ai có thể cho tôi biết làm thế nào SignalR hoạt động nội bộ một cách cao cấp?

Tôi đoán nó đang xóa dữ liệu bằng cách sử dụng Response.Flushvà ở phía máy khách, nó đang gửi các yêu cầu Ajax theo các khoảng thời gian nhất định. Nó có đúng không?


13
@dfowler đã thực hiện một cuộc phỏng vấn với Scott Hansman gần đây rất hanselminutes.com/291/NH .
Sắp xếp

1
Bài viết tốt về kiến trúc r tín hiệu và làm thế nào nó hoạt động lostechies.com/erichexter/2012/11/05/... asp.net/signalr/overview/getting-started/...
Mahesh

Tôi biết nó đã có từ lâu nhưng microsoftvirtualacademy.com/Content/
trộm

1
Cũng xem bài thuyết trình này tại NDC 2013 từ David Fowler và Damian Edwards có tên 'Under the cover with ASP.NET SignalR' nơi họ xây dựng một phiên bản nhỏ gọn của SignalR trực tiếp trên sân khấu. Nó rất nhiều thông tin. Đó là tiền 2.0 nhưng điều đó không quan trọng lắm. vimeo.com/68383353
Johan B

Câu trả lời:


241

Không, SignalR là một sự trừu tượng hóa trên một kết nối. Nó cung cấp cho bạn hai mô hình lập trình qua kết nối đó (trung tâm và kết nối liên tục). SignalR có một khái niệm về vận tải, mỗi lần vận chuyển quyết định cách gửi / nhận dữ liệu và cách kết nối và ngắt kết nối.

SignalR có một vài phương tiện vận chuyển được xây dựng:

  1. WebSockets
  2. Sự kiện máy chủ đã gửi
  3. Khung mãi mãi
  4. Bỏ phiếu dài

SignalR cố gắng chọn kết nối "tốt nhất" được hỗ trợ bởi máy chủ và máy khách (bạn cũng có thể buộc nó sử dụng một phương tiện giao thông cụ thể).

Đó là cấp độ cao. Nếu bạn muốn xem cách vận chuyển được thực hiện, bạn có thể xem mã nguồn .

Ngoài ra còn có mã khách hàng cho mỗi lần vận chuyển: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Nếu bạn đang hỏi về cách vận chuyển bỏ phiếu dài hoạt động cụ thể:

Nó sẽ gửi một yêu cầu ajax đến máy chủ đang chờ không đồng bộ để tín hiệu phản hồi. Khi có tín hiệu hoặc hết yêu cầu, nó sẽ trả về từ máy chủ và gửi yêu cầu khác và quá trình tiếp tục. (Tôi đã để lại một số chi tiết về cách khách hàng theo dõi những gì họ thấy để nó không bỏ lỡ tin nhắn)

Hy vọng rằng câu trả lời hầu hết các câu hỏi của bạn.


3
bạn có thể cho tôi biết có bao nhiêu kết nối có thể hỗ trợ cùng một lúc không?
Farhad-Taran

1
Về việc có bao nhiêu kết nối mà Signalr sẽ hỗ trợ tùy thuộc vào giới hạn yêu cầu của IIS. Nó có thể được tăng lên bằng cách sử dụng các mục cấu hình hoặc tập lệnh shell. Thông thường Signalr lưu trữ 1000 kết nối trong bộ nhớ.
Thanigainathan

1
Như đã đề cập, cuộc biểu tình giới hạn là ở cấp độ máy chủ. Damnien Edwards (đồng sáng tạo của SignalR) đã nhận được 150.000 kết nối từ một máy chủ 10GB duy nhất: twitter.com/DamianEdwards/status/486642486350061568
LDJ

bất kỳ câu trả lời nào cho câu hỏi này stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl vui lòng đưa ra câu trả lời cho stackoverflow.com/questions/47504361/
Hitesh Thakor

5

@davidfowl đã trả lời phần chính. Tuy nhiên, để cung cấp thêm một số chi tiết liên quan đến sự khác biệt trong hành vi vận chuyển, cụ thể là giữa WebSocket và các vận tải khác; dưới đây là một số điểm.

  • WebSocket là phương tiện giao thông duy nhất thiết lập kết nối hai chiều liên tục thực sự giữa máy khách và máy chủ. Tuy nhiên, WebSocket chỉ được hỗ trợ bởi IIS 8 trở lên và các phiên bản mới nhất của Internet Explorer, Google Chrome và Mozilla Firefox.
  • Trong khi Máy chủ gửi các sự kiện, Khung mãi mãi và bỏ phiếu dài, cả ba đều theo giao tiếp một chiều và được hầu hết các trình duyệt hỗ trợ.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.