SignalR là gì? Lập trình thời gian thực nền web trong .net

1. SignalR là gì?

SignalR là một thư viện giành cho ASP.NET nhằm đơn giản hóa việc xây dựng các ứng dụng web thời gian thực. Chức năng thời gian thực ở đây là khả năng máy chủ sẽ chủ động đẩy dữ liệu về cho client nếu client đó kết nối tới máy chủ thay vì các client phải gửi yêu cầu làm mới dữ liệu tới máy chủ.

Mô hình bình thường của web là client gửi request đến server và server trả về kết quả tương ứng cho client, nhưng giờ ta có một cách thức nữa để tương tác: server “push” trực tiếp dữ liệu về client, theo thời gian thực. Ngoài ra, mô hình này cũng giúp ta xây dựng ứng dụng bất đồng bộ lên đến hàng nghìn kết nối một lúc với máy chủ

signalr_webvietgroup-1

Signalr xử lý kết nối một cách tự động, nó cho phép gửi thông báo đến tất cả các client trong cùng một khoảng thời gian. Nó cũng cho phép gửi thông báo đến từng client riêng biệt. Kết nối giữa client và server được duy trì liên tục, không giống kiểu HTTP cũ.

Signalr hỗ trợ chức năng “server push”, trong đó code ở phía server có thể gọi code ở phía trình duyệt bằng cách sử dụng lời gọi thủ tục từ xa (Remove Proceduce Calls), chứ không phải là mô hình đáp ứng yêu cầu phố biên trên web hiện nay.

Ứng dụng sư dụng signalR có thể mở rộng cho hàng ngàn kết nối bằng cách sử dụng Service Bus, SQL server, hoặc redis

2. Phương thức vận chuyển

Trong phần này mình sẽ nói về các cách thức mà SignalR sử dụng để gửi dữ liệu về client. SignalR cung một loại các cơ chế để gửi dữ liệu về client, tùy theo điều kiện đáp ứng của nền tảng máy chủ và client mà SignalR sẽ tự động lự chọn phương thức phù hợp nhất.

Một kết nối SignalR được bắt đầu bằng giao thức HTTP, sau đó nó sẽ được chuyển sang kết nối kiểu WebSocket nếu nó được hỗ trợ. Ở đây mình sẽ chia ra làm 2 loại như sau:

HTML 5 tranport

  • WebSocket: Là phương thức duy nhất hỗ trợ kết nối liên tục, hai chiều giữa client và server. Tuy nhiên nó đòi hỏi những điều kiện nghiêm ngặt về môi trường máy chủ cũng như trình duyệt như: Windows Server 2012 or Windows 8, and .NET Framework 4.5, trình duyệt tham khảo link sau http://caniuse.com/websockets
  • Server Send Event: hay còn được gọi là EventSource hỗ trợ tất cả các trình duyệt trừ IE

Comet tranport

  • Forever Frame (for Internet Explorer only) Kỹ thuật Forever Iframes sử dụng một thẻ Iframe ẩn đặt trong trang với thuộc tính src trỏ đến đường dẫn servlet nhằm trả về các sự kiện máy chủ. Mỗi khi nhận được một sự kiện, servlet sẽ viết và đổ vào một thẻ script với mã JavaScript bên trong. Nội dung của iframe sẽ được thêm vào thẻ script này và được thực thi.
  • Ajax long polling Kỹ thuật này không tạo một kết nối liên tục, nhưng nó vẫn mở kết lối cho đến khi nhận được dữ liệu trả về từ server lúc này kết lỗi cũ sẽ được đóng lại và một kết lối mới sẽ được mở ra. Điều này có thể dẫn đến một độ trễ nhất định.

Quá trình lựa chọn các cách thức kết nối của SignalR

signalr_webvietgroup-2

  1. IE 8 hoặc nhỏ hơn thì sử dụng Long Polling
  2. Nếu JSONP được cấu hình thì sử dụng Long Polling
  3. Web Sockets được sử dụng khi các yếu tố sau được đảm bảo
    1. Client hỗ trợ CORS (Cross-Origin Resource Sharing)
    2. Client hỗ trợ Web Sockets
    3. Server hỗ trợ Web Sockets
    4. Nếu một trong ba yếu tố trên không được đáp ứng thì Long Polling sẽ được sử dụng.
  4. Nếu JSONP không được cấu hình và kết nối không hỗ trợ cross-domain. Web Sockets sẽ được sử dụng nếu cả server và client đều hỗ trợ Web Sockets
  5. Nếu client hoặc server không hỗ trợ Web Sockets, Server Send Events sẽ được sử dụng nếu nó có sẵn.
  6. Nếu Server Send Events không có thì Forever Frame sẽ được sử dụng.
  7. Nếu Forever Frame không có thì Long Polling sẽ được sử dụng.

Tham khảo: http://webvietgroup.com/xay-dung-web-thoi-gian-thuc-voi-signalr-bai-1/

Leave a Reply

Your email address will not be published. Required fields are marked *