Nguon: Microsoft Learn · .NET 8.0

Sự khác biệt giữa SignalR và ASP.NET Core SignalR

Nguồn: Differences between SignalR and ASP.NET Core SignalR

ASP.NET Core SignalR không tương thích với các client hoặc server dành cho ASP.NET SignalR. Bài viết này trình bày chi tiết các tính năng đã bị xóa hoặc thay đổi trong ASP.NET Core SignalR.

Cách xác định phiên bản SignalR

-ASP.NET SignalRASP.NET Core SignalR
Server NuGet packageMicrosoft.AspNet.SignalRKhông có. Được bao gồm trong shared framework Microsoft.AspNetCore.App.
Client NuGet packagesMicrosoft.AspNet.SignalR.Client Microsoft.AspNet.SignalR.JSMicrosoft.AspNetCore.SignalR.Client
JavaScript client npm packagesignalr@microsoft/signalr
Java clientGitHub Repository (đã lỗi thời)Maven package com.microsoft.signalr
Kiểu ứng dụng serverASP.NET (System.Web) hoặc OWIN Self-HostASP.NET Core
Nền tảng server được hỗ trợ.NET Framework 4.5 trở lên.NET Core 3.0 trở lên

Sự khác biệt về tính năng

Tự động kết nối lại (Automatic reconnects)

Trong ASP.NET SignalR:

Trong ASP.NET Core SignalR:

csharp
HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
javascript
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

Hỗ trợ Protocol

ASP.NET Core SignalR hỗ trợ JSON, cũng như một protocol nhị phân mới dựa trên MessagePack. Ngoài ra, các protocol tùy chỉnh có thể được tạo.

Transports

Forever Frame transport không được hỗ trợ trong ASP.NET Core SignalR.

Sự khác biệt phía server

Các thư viện phía server của ASP.NET Core SignalR được bao gồm trong Microsoft.AspNetCore.App, được sử dụng trong template ASP.NET Core Web Application cho cả dự án Razor và MVC.

ASP.NET Core SignalR là một ASP.NET Core middleware (phần mềm trung gian). Nó phải được cấu hình bằng cách gọi AddSignalR trong Startup.ConfigureServices.

csharp
services.AddSignalR()

Để cấu hình routing (định tuyến), ánh xạ các route đến hubs bên trong phương thức gọi UseEndpoints trong phương thức Startup.Configure.

csharp
app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

Sticky sessions

Mô hình mở rộng (scaleout model) cho ASP.NET SignalR cho phép clients kết nối lại và gửi thông điệp đến bất kỳ server nào trong farm. Trong ASP.NET Core SignalR, client phải tương tác với cùng một server trong suốt thời gian kết nối. Đối với scaleout sử dụng Redis, điều đó có nghĩa là sticky sessions là bắt buộc. Đối với scaleout sử dụng Azure SignalR Service, sticky sessions không bắt buộc vì service xử lý các kết nối đến clients.

Một hub duy nhất mỗi kết nối

Trong ASP.NET Core SignalR, mô hình kết nối đã được đơn giản hóa. Các kết nối được thực hiện trực tiếp đến một hub duy nhất, thay vì một kết nối duy nhất được sử dụng để chia sẻ quyền truy cập đến nhiều hubs.

Streaming

ASP.NET Core SignalR hiện hỗ trợ streaming data từ hub đến client.

State

Khả năng truyền trạng thái tùy ý giữa các clients và hub (thường được gọi là HubState) đã bị xóa, cũng như hỗ trợ cho các thông điệp tiến trình. Hiện tại không có tương đương của hub proxies.

Xóa bỏ PersistentConnection

Trong ASP.NET Core SignalR, lớp PersistentConnection đã bị xóa.

GlobalHost

ASP.NET Core có dependency injection (DI) được tích hợp sẵn vào framework. Các service có thể sử dụng DI để truy cập HubContext. Đối tượng GlobalHost được sử dụng trong ASP.NET SignalR để lấy HubContext không tồn tại trong ASP.NET Core SignalR.

HubPipeline

ASP.NET Core SignalR không có hỗ trợ cho các module HubPipeline.

Sự khác biệt phía client

TypeScript

ASP.NET Core SignalR client được viết bằng TypeScript. Bạn có thể viết bằng JavaScript hoặc TypeScript khi sử dụng JavaScript client.

JavaScript client được host tại npm

Trong các phiên bản ASP.NET, JavaScript client được lấy thông qua NuGet package trong Visual Studio. Trong các phiên bản ASP.NET Core, package npm @microsoft/signalr chứa các thư viện JavaScript. Package này không được bao gồm trong template ASP.NET Core Web Application. Sử dụng npm để lấy và cài đặt package npm @microsoft/signalr.

console
npm init -y
npm install @microsoft/signalr

jQuery

Sự phụ thuộc vào jQuery đã bị xóa, tuy nhiên các dự án vẫn có thể sử dụng jQuery.

Hỗ trợ Internet Explorer

ASP.NET Core SignalR không hỗ trợ Microsoft Internet Explorer, trong khi ASP.NET SignalR hỗ trợ Microsoft Internet Explorer 8 trở lên. Để biết thêm thông tin, xem ASP.NET Core SignalR supported platforms.

Cú pháp phương thức JavaScript client

Cú pháp JavaScript đã thay đổi so với phiên bản ASP.NET của SignalR. Thay vì sử dụng đối tượng $connection, hãy tạo kết nối bằng API HubConnectionBuilder.

javascript
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Sử dụng phương thức on để chỉ định các phương thức client mà hub có thể gọi.

javascript
connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

Sau khi tạo phương thức client, khởi động kết nối hub. Nối thêm phương thức catch để ghi log hoặc xử lý lỗi.

javascript
connection.start().catch(err => console.error(err));

Hub proxies

Hub proxies không còn được tự động tạo ra nữa. Thay vào đó, tên phương thức được truyền vào API invoke dưới dạng string.

.NET và các client khác

Package NuGet Microsoft.AspNetCore.SignalR.Client chứa các thư viện .NET client cho ASP.NET Core SignalR.

Sử dụng HubConnectionBuilder để tạo và xây dựng một thể hiện kết nối đến một hub.

csharp
connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

Sự khác biệt về Scaleout

ASP.NET SignalR hỗ trợ SQL Server và Redis. ASP.NET Core SignalR hỗ trợ Azure SignalR Service và Redis.

ASP.NET

ASP.NET Core