Gần đây tôi đã tìm kiếm và đọc về SignalR và trong khi tôi thấy rất nhiều giải thích về sự khác biệt giữa Hubs và Persistent Connections, tôi không thể có được đầu xung quanh cấp độ tiếp theo, đó là lý do Tôi sẽ chọn một cách tiếp cận khác?SignalR: Tại sao chọn Hub so với Kết nối liên tục?
Trả lời
Từ những gì tôi thấy trong số Connection and Hubs section có vẻ như các Trung tâm cung cấp một hệ thống chủ đề che phủ các kết nối liên tục cấp thấp hơn.
Từ những nhận xét đánh giá cao lên-bình chọn dưới đây:
một phần đúng. Bạn cũng có thể nhận các chủ đề hoặc nhóm trong các kết nối liên tục. Sự khác biệt lớn là gửi các loại tin nhắn khác nhau. Ví dụ bạn có các loại thông điệp khác nhau và bạn muốn gửi các loại tải trọng khác nhau. Với các kết nối liên tục, bạn phải nhúng loại tin nhắn trong tải trọng (xem mẫu thô) nhưng các hub cho bạn khả năng thực hiện RPC qua kết nối (cho phép bạn gọi các phương thức trên máy khách từ máy chủ và từ máy chủ đến máy khách) . Một điều quan trọng nữa là mô hình ràng buộc. Hub cho phép bạn truyền các tham số được gõ mạnh mẽ cho các phương thức.
Ví dụ được sử dụng trong tài liệu sử dụng ẩn dụ phòng trò chuyện, nơi người dùng có thể tham gia một phòng cụ thể và sau đó chỉ nhận tin nhắn từ những người dùng khác trong cùng một phòng. Thông thường, mã của bạn đăng ký một chủ đề và sau đó chỉ nhận được các tin nhắn được xuất bản cho chủ đề đó. Với các kết nối liên tục, bạn sẽ nhận được tất cả tin nhắn.
Bạn có thể dễ dàng xây dựng hệ thống chủ đề của riêng mình trên các kết nối liên tục, nhưng trong trường hợp này nhóm SignalR đã làm việc đó cho bạn.
Có hai cách để sử dụng SignalR: bạn có thể truy cập nó ở mức thấp bằng cách ghi đè lên lớp PersistentConnection
, điều này mang lại cho bạn nhiều quyền kiểm soát; hoặc bạn có thể để SignalR làm tất cả việc nâng hạng nặng cho bạn, bằng cách sử dụng ‘Hubs’ cấp cao.
câu trả lời đơn giản và rõ ràng :-) – WASIF
kết nối liên tục là một API mức thấp hơn, bạn có thể thực hiện những hành động đúng thời hạn cụ thể hơn khi kết nối được mở hoặc đóng, trong hầu hết các ứng dụng Hub là sự lựa chọn tốt nhất
Sự khác biệt chính là bạn có thể không làm RPC với PersistentConnection, bạn chỉ có thể gửi dữ liệu thô. Vì vậy, thay vì gửi tin nhắn từ máy chủ như thế này
Clients.All.addNewMessageToPage(name, message);
bạn phải gửi một đối tượng với Connection.Broadcast()
hoặc Connection.Send()
và sau đó khách hàng sẽ phải quyết định làm gì với điều đó. Bạn có thể, ví dụ, gửi một đối tượng như thế này:
Connection.Broadcast(new {
method: "addNewMessageToPage",
name: "Albert",
message: "Hello"
});
Và trên máy khách, thay vì chỉ đơn giản là xác định
yourHub.client.addNewMessageToPage = function(name, message) {
// things and stuff
};
bạn phải thêm một callback để xử lý tất cả các tin nhắn gửi đến:
function addNewMessageToPage(name, message) {
// things and stuff
}
connection.received(function (data) {
var method = data.method;
window[method](data.name, data.message);
});
Bạn sẽ phải thực hiện cùng một loại điều phối ở phía máy chủ theo phương thức OnReceived
. Bạn cũng phải deserialize chuỗi dữ liệu ở đó thay vì nhận các đối tượng được gõ mạnh như bạn làm với các phương thức hub.
Không có nhiều lý do để chọn PersistentConnection over Hubs.Một lý do tôi biết là có thể send preserialized JSON qua PersistentConnection mà bạn không thể thực hiện bằng cách sử dụng các hub. Trong một số trường hợp nhất định, đây có thể là lợi ích hiệu suất có liên quan.
Ngoài ra, xem trích dẫn này từ documentation:
Chọn một mô hình truyền thông
Hầu hết các ứng dụng nên sử dụng API Hubs. API kết nối có thể sử dụng trong các trường hợp sau:
Định dạng của thư thực được gửi cần được chỉ định.
Nhà phát triển muốn làm việc với mô hình nhắn tin và gửi đi thay vì mô hình gọi từ xa.
- Ứng dụng hiện có sử dụng mô hình nhắn tin đang được chuyển để sử dụng SignalR.
Tùy thuộc vào cấu trúc thư của bạn, bạn cũng có thể nhận được các lợi ích nhỏ về hiệu suất từ việc sử dụng PersistentConnection.
Bạn có thể muốn xem xét các mẫu SignalR, cụ thể this here.
Có ba điểm chính cần xem xét khi so sánh hai:
- Message Format
- mô hình truyền thông
- Tùy chỉnh SignalR
Với trung tâm tôi Định dạng ssage về cơ bản được xử lý từ bạn nhưng với các kết nối liên tục, thông báo là thô và đã được mã hóa và phân tích cú pháp qua lại. Nếu kích thước tin nhắn là quan trọng thì cũng lưu ý rằng tải trọng của một kết nối liên tục ít hơn nhiều so với trọng lượng của một hub.
Khi nói đến kết nối liên tục, mô hình liên kết về cơ bản có chức năng gửi và nhận tin nhắn trong khi các hub lấy mô hình remote procedure call với chức năng duy nhất theo yêu cầu.
Khi nói đến tùy chỉnh vì các kết nối liên tục ở mức thấp hơn, chúng có thể cho phép bạn kiểm soát nhiều hơn tùy chỉnh.
- 1. Kết nối liên tục Signalr với thông số truy vấn.
- 2. SignalR Kết nối liên tục cho 404 trên echo/negotiate
- 3. SignalR/signalr/hub 404 Không tìm thấy
- 4. mysqli kết nối liên tục
- 5. Nhận connectionId ngoài Hub, SignalR
- 6. Kết nối HTTP liên tục với RestSharp
- 7. HttpContext null trong tập tin Signalr Hub
- 8. SignalR: cách thực thi xác thực/chấm dứt kết nối hub phía máy chủ
- 9. Detect SignalR Hub Khách hàng Ngắt kết nối ngay lập tức
- 10. SignalR kết nối/ngắt kết nối trung tâm thổi lên
- 11. MySQL - kết nối liên tục vs kết nối tổng hợp
- 12. Selenium Grid2 - Nút từ xa không kết nối với HUB
- 13. Khách hàng SignalR với nhiều kết nối
- 14. gọi SignalR hub từ các vấn đề điều khiển WebAPI
- 15. Điều gì có thể gây ra kết nối với APNS để ngắt kết nối liên tục?
- 16. SignalR - Kiểm tra xem người dùng vẫn đang kết nối
- 17. Tại sao các kết nối liên tục không được hỗ trợ bởi URLLib2?
- 18. SignalR .NET client ngắt kết nối
- 19. SignalR gửi tin nhắn tới một kết nối duy nhấtId
- 20. Tại sao các yếu tố liên tục của quicksort tốt hơn so với heapsort?
- 21. SignalR an toàn kết nối giữa NET Client và Server
- 22. Kết nối liên tục để ghi nhớ trong PHP
- 23. SignalR - Xử lý người dùng bị ngắt kết nối
- 24. SignalR với kết nối không đáng tin cậy hoặc tạm dừng và kết nối lại?
- 25. SignalR: phát hiện trạng thái kết nối trên máy khách
- 26. SignalR: ngắt kết nối máy khách
- 27. Cách kết nối với trung tâm SignalR từ ứng dụng PhoneGap trên iOS?
- 28. Máy khách Java để kết nối với SignalR?
- 29. Tại sao Visual Studio liên tục gặp sự cố?
- 30. Mysql kết nối liên tục và lợi thế của mysql_pconnect?
Một phần chính xác. Bạn cũng có thể nhận các chủ đề hoặc nhóm trong các kết nối liên tục. Sự khác biệt lớn là gửi các loại tin nhắn khác nhau. Ví dụ bạn có các loại thông điệp khác nhau và bạn muốn gửi các loại tải trọng khác nhau. Với các kết nối liên tục, bạn phải nhúng loại tin nhắn trong tải trọng (xem mẫu thô) nhưng các hub cho bạn khả năng thực hiện RPC qua kết nối (cho phép bạn gọi các phương thức trên máy khách từ máy chủ và từ máy chủ đến máy khách) . Một điều quan trọng nữa là mô hình ràng buộc. Hub cho phép bạn truyền các tham số được gõ mạnh mẽ cho các phương thức. – davidfowl
Nhận xét trên phải là câu trả lời được chấp nhận. –
Liên kết bị hỏng –