SignalR là gì?
SignalR Hubs API cho phép bạn gọi các phương thức trên client được kết nối từ server. Tức là, trong code ở server, bạn định nghĩa ra các phương để client gọi và dùng. Và trên code ở client, bạn gọi lại các phương thức được định nghĩa từ server. Và SignalR được sinh ra để xử lý mọi thứ giúp cho client và server giao tiếp với nhau theo thời gian thực.
Real-time là gì? Đó là khả năng server đẩy những nội dung tới client đã được kết nối một cách tức thì. Nó khác với giao thức HTTP thông thường: server đợi những yêu cầu từ client và trả về nội dung tương ứng.
SignalR xử lý quản lý kết nối một cách tự động, và cho bạn truyền đi thông điệp tới tất cả các client đã được kết nối một cách đồng loạt. Bạn cũng có thể gửi những thông điệp tới những client được xác định. Kết nối giữa client và server là liên tục, không giống như kết nối HTTP cổ điển, cái mà sẽ thành lập lại kết nối cho mỗi lần giao tiếp.
Ví dụ ta các ứng dụng sau sử dụng SignalR:
- Chat app giống Facebook Messenger, Zalo,...
- Chức năng thông báo đẩy như trong mạng xã hội.
- Live dashboards, ví dụ như KPI dashboards, hiển thị ngay lập tức sau khi cập nhật thông tin bán hàng.
- Các meeting room, nơi diễn ra các cuộc họp, bàn luận, tức là khi một ai đó join vào sẽ đẩy vào room ngay lập tức chứ không thực hiện reload.
Để xử lý giao tiếp thời gian thực, SignalR hỗ trợ:
- WebSockets
- Server-Sent Events (các event từ máy chủ gửi đến)
- Long Polling
Hubs
- ConnectionAborted
- ConnectionId
- Features
- Items
- User
- UserIdentifier
Tạo và sử dụng SignalR
public class ChatHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Context object
Thuộc tính/method | Mô tả |
---|---|
ConnectionId | Nhận ID duy nhất cho kết nối, được chỉ định bởi SignalR. Có một ID kết nối cho mỗi kết nối. |
UserIdentifier | Theo mặc định, SignalR sử dụng ClaimTypes.NameIdentifier từ ClaimsPrincipal với kết nối làm định danh người dùng. |
User | Từ ClaimsPrincipal để lấy người dùng hiện tại. |
Items | Lấy một collection gồm key/value sử dụng để chia sẻ dữ liệu trong phạm vi của kết nối này. |
Features | Nhận bộ sưu tập các tính năng có sẵn trên kết nối. |
ConnectionAborted | Nhận một thông báo CancellationToken khi kết nối bị hủy bỏ. |
GetHttpContext | Đây là một method trả về một HttpContext cho mỗi connection, hoặc null nếu kết nối không được liên kết với một yêu cầu HTTP. |
Abort | Phương thức dùng để hủy kết nối. |
Client Object
Thuộc tính | Mô tả |
---|---|
All | Gọi một phương thức trên tất cả client đã được kết nối |
Caller | Theo mặc định, SignalR sử dụng ClaimTypes.NameIdentifier từ ClaimsPrincipal với kết nối làm định danh người dùng. |
Others | Gọi một phương thức trên tất cả client được kết nối ngoại trừ các client đã gọi phương thức |
Phương thức | Mô tả |
---|---|
AllExcept | Gọi một phương thức trên tất cả các máy khách được kết nối ngoại trừ các kết nối được chỉ định |
Client | Gọi một phương thức trên một ứng dụng khách được kết nối cụ thể |
Clients | Gọi một phương thức trên các máy khách được kết nối cụ thể |
Group | Gọi một phương thức trên tất cả các kết nối trong nhóm được chỉ định |
GroupExcept | Gọi một phương thức trên tất cả các kết nối trong nhóm được chỉ định, ngoại trừ các kết nối được chỉ định |
Groups | Gọi một phương thức trên nhiều nhóm kết nối |
OthersInGroup | Gọi một phương thức trên một nhóm kết nối, ngoại trừ ứng dụng khách đã gọi phương thức trung tâm |
User | Gọi một phương thức trên tất cả các kết nối được liên kết với một người dùng cụ thể |
Users | Gọi một phương thức trên tất cả các kết nối được liên kết với những người dùng được chỉ định |
Send messages đến clients
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
public Task SendMessageToCaller(string user, string message)
{
return Clients.Caller.SendAsync("ReceiveMessage", user, message);
}
public Task SendMessageToGroup(string user, string message)
{
return Clients.Group("SignalR Users").SendAsync("ReceiveMessage", user, message);
}
- SendMessage dùng để gửi tin nhắn đến tất cả các máy khách được kết nối bằng cách sử dụng
- Clients.All.SendMessageToCaller dùng để gửi tin nhắn lại cho người gọi bằng cách sử dụng
- Clients.Caller. SendMessageToGroup gửi một tin nhắn cho tất cả các clients trong một nhóm SignalR Users.
Lời kết
Mong bài viết hữu ích đến các bạn. Chúc các bạn thành công.Hieu Ho.
A Niệm nè, cho a đặt LK với nhé, a đặt trước rồi á.
Trả lờiXóaStar Cường IT
https://www.starcuongit.com/
Dạ em đặt rồi anh
XóaBan oi mua themes nay thi mua nhu the nao va gia nhu the nao a
Trả lờiXóatat nhien la do A Niem A trai Nang gioi thieu roi a :(
XóaHi bạn, sorry vì phản hồi chậm trễ, bạn cho mình xin thông tin liên hệ với ạ. Thanks.
XóaXịn xò quá sốp ưi kkk
Trả lờiXóaThanks sốp
Trả lờiXóa