Tổng quan về ASP.NET Core SignalR
Nguồn: Introduction to ASP.NET Core SignalR | Phiên bản: .NET 8.0
Trong bài viết này
- SignalR là gì?
- Transports (Phương thức truyền tải)
- Hubs (Trung tâm)
- Trình duyệt không hỗ trợ ECMAScript 6 (ES6)
- Tài nguyên bổ sung
SignalR là gì?
ASP.NET Core SignalR là một thư viện mã nguồn mở giúp đơn giản hóa việc thêm chức năng web thời gian thực (real-time web functionality) vào ứng dụng. Chức năng web thời gian thực cho phép code phía server đẩy nội dung đến các client ngay lập tức.
Các ứng dụng phù hợp để dùng SignalR:
- Ứng dụng yêu cầu cập nhật tần suất cao từ server. Ví dụ: ứng dụng game, mạng xã hội, bình chọn, đấu giá, bản đồ và GPS.
- Ứng dụng dashboard (bảng điều khiển) và giám sát. Ví dụ: bảng điều khiển nội bộ công ty, cập nhật doanh số tức thời hoặc cảnh báo hành trình.
- Ứng dụng cộng tác (collaborative apps). Ứng dụng bảng vẽ (whiteboard) và phần mềm họp nhóm là những ví dụ điển hình.
- Ứng dụng yêu cầu thông báo (notifications). Mạng xã hội, email, chat, game, cảnh báo hành trình và nhiều ứng dụng khác đều sử dụng thông báo.
SignalR cung cấp một API để tạo các remote procedure calls (RPC) (lời gọi thủ tục từ xa) từ server đến client. Các RPC này gọi các hàm trên client từ code .NET phía server. Có nhiều nền tảng được hỗ trợ, mỗi nền tảng có SDK client riêng. Do đó, ngôn ngữ lập trình được gọi bởi RPC sẽ khác nhau tùy nền tảng.
Dưới đây là một số tính năng của SignalR dành cho ASP.NET Core:
- Tự động xử lý quản lý kết nối (connection management).
- Gửi tin nhắn đến tất cả các client đang kết nối cùng lúc. Ví dụ: phòng chat.
- Gửi tin nhắn đến các client cụ thể hoặc nhóm client.
- Mở rộng quy mô để xử lý lưu lượng truy cập ngày càng tăng.
- SignalR Hub Protocol
Mã nguồn được lưu trữ tại kho SignalR trên GitHub.
Transports (Phương thức truyền tải)
SignalR hỗ trợ các kỹ thuật sau để xử lý giao tiếp thời gian thực (theo thứ tự ưu tiên khi dự phòng dần):
- WebSockets
- Server-Sent Events (Sự kiện gửi từ máy chủ)
- Long Polling (Thăm dò dài hạn)
SignalR tự động chọn phương thức transport (truyền tải) tốt nhất trong khả năng của server và client.
Hubs (Trung tâm)
SignalR sử dụng hubs (trung tâm) để giao tiếp giữa client và server.
Một Hub (trung tâm) là một pipeline (đường ống xử lý) cấp cao cho phép client và server gọi các phương thức lên nhau. SignalR tự động xử lý việc điều phối (dispatching) qua các ranh giới máy tính, cho phép client gọi các phương thức trên server và ngược lại. Bạn có thể truyền các tham số được định kiểu mạnh (strongly-typed parameters) vào các phương thức, giúp cho phép model binding (ràng buộc mô hình). SignalR cung cấp hai hub protocol (giao thức trung tâm) tích hợp sẵn: một giao thức văn bản dựa trên JSON và một giao thức nhị phân dựa trên MessagePack. MessagePack thường tạo ra các tin nhắn nhỏ hơn so với JSON. Các trình duyệt cũ phải hỗ trợ XHR level 2 để cung cấp hỗ trợ giao thức MessagePack.
Hubs (trung tâm) gọi code phía client bằng cách gửi các tin nhắn chứa tên và tham số của phương thức phía client. Các đối tượng được gửi dưới dạng tham số phương thức sẽ được deserialized (giải tuần tự hóa) bằng giao thức đã cấu hình. Client cố gắng khớp tên với một phương thức trong code phía client. Khi client tìm thấy kết quả khớp, nó sẽ gọi phương thức đó và truyền cho nó dữ liệu tham số đã được deserialized.
Trình duyệt không hỗ trợ ECMAScript 6 (ES6)
SignalR nhắm đến ES6. Đối với các trình duyệt không hỗ trợ ES6, hãy transpile (biên dịch chuyển đổi) thư viện sang ES5. Để biết thêm thông tin, xem Getting Started with ES6 – Transpiling ES6 to ES5 with Traceur and Babel.