다음을 통해 공유


ASP.NET SignalR과 ASP.NET Core SignalR 간의 차이점

ASP.NET Core SignalR은 ASP.NET SignalR에 대한 클라이언트 또는 서버와 호환되지 않습니다. 이 문서에서는 ASP.NET Core SignalR에서 제거되거나 변경된 기능에 대해 자세히 설명합니다.

SignalR 버전을 확인하는 방법

ASP.NET SignalR ASP.NET Core SignalR
서버 NuGet 패키지 Microsoft.AspNet.SignalR 없음 Microsoft.AspNetCore.App 공유 프레임워크에 포함되어 있습니다.
클라이언트 NuGet 패키지 Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
JavaScript 클라이언트 npm 패키지 signalr @microsoft/signalr
Java 클라이언트 GitHub 리포지토리(사용되지 않음) Maven 패키지 com.microsoft.signalr
서버 앱 유형 ASP.NET(System.Web) 또는 OWIN Self-Host ASP.NET Core
지원되는 서버 플랫폼 .NET Framework 4.5 이상 .NET Core 3.0 이상
ASP.NET SignalR ASP.NET Core SignalR
서버 NuGet 패키지 Microsoft.AspNet.SignalR Microsoft.AspNetCore.App(.NET Core)
Microsoft.AspNetCore(SignalR.NET Framework)
클라이언트 NuGet 패키지 Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
JavaScript 클라이언트 npm 패키지 signalr @aspnet/signalr
Java 클라이언트 GitHub 리포지토리(사용되지 않음) Maven 패키지 com.microsoft.signalr
서버 앱 유형 ASP.NET(System.Web) 또는 OWIN Self-Host ASP.NET Core
지원되는 서버 플랫폼 .NET Framework 4.5 이상 .NET Framework 4.6.1 이상
.NET Core 2.1 이상

기능 차이점

자동 다시 연결

ASP.NET SignalR에서:

  • 기본적으로 SignalR에서 연결이 끊어지면 서버에 다시 연결을 시도합니다.

ASP.NET Core SignalR에서:

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

ASP.NET Core 3.0 이전에는 SignalR이 자동 다시 연결을 지원하지 않습니다. 클라이언트의 연결이 끊어지면 사용자는 새 연결을 명시적으로 시작하여 다시 연결해야 합니다. ASP.NET SignalR에서 SignalR은 연결이 끊어지면 서버에 다시 연결을 시도합니다.

프로토콜 지원

ASP.NET Core SignalR에서는 JSON을 지원하고 MessagePack을 기반으로 하는 새 이진 프로토콜을 지원합니다. 또한 사용자 지정 프로토콜을 만들 수 있습니다.

전송

ASP.NET Core SignalR에서 무한 프레임 전송은 지원되지 않습니다.

서버의 차이점

ASP.NET Core SignalR 서버 쪽 라이브러리는 Razor 및 MVC 프로젝트의 ASP.NET Core 웹 애플리케이션 템플릿에 사용되는 Microsoft.AspNetCore.App에 포함되어 있습니다.

ASP.NET Core SignalR은 ASP.NET Core 미들웨어입니다. Startup.ConfigureServices에서 AddSignalR을 호출하여 구성해야 합니다.

services.AddSignalR()

라우팅을 구성하려면 Startup.Configure 메서드의 UseEndpoints 메서드 호출 내에서 허브에 경로를 매핑합니다.

app.UseRouting();

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

라우팅을 구성하려면 Startup.Configure 메서드의 UseSignalR 메서드 호출 내에서 허브에 경로를 매핑합니다.

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

고정 세션

ASP.NET SignalR에 대한 확장 모델을 사용하면 클라이언트가 팜의 모든 서버에 다시 연결하여 메시지를 보낼 수 있습니다. ASP.NET Core SignalR에서 클라이언트는 연결 기간 동안 동일한 서버와 상호 작용해야 합니다. Redis를 사용하는 확장의 경우에는 고정 세션이 필요합니다. Azure SignalR Service를 사용하는 확장의 경우 서비스에서 클라이언트에 대한 연결을 처리하기 때문에 고정 세션이 필요하지 않습니다.

연결당 단일 허브

ASP.NET Core SignalR에서는 연결 모델이 간소화되었습니다. 여러 허브에 대한 액세스를 공유하는 데 사용되는 단일 연결이 아닌 단일 허브로 직접 연결됩니다.

Streaming

ASP.NET Core SignalR은 이제 허브에서 클라이언트로의 스트리밍 데이터를 지원합니다.

State(상태)

클라이언트와 허브(HubState라고도 함) 간에 임의의 상태를 전달하는 기능이 제거되었으며 진행 메시지를 지원합니다. 현재 허브 프록시의 대응 항목이 없습니다.

PersistentConnection 제거

ASP.NET Core SignalR에서 PersistentConnection 클래스가 제거되었습니다.

GlobalHost

ASP.NET Core에는 프레임워크에 기본 제공되는 DI(종속성 주입)가 있습니다. 서비스는 DI를 사용하여 HubContext에 액세스할 수 있습니다. HubContext를 가져오기 위해 ASP.NET SignalR에 사용되는 GlobalHost 개체가 ASP.NET Core SignalR에 존재하지 않습니다.

HubPipeline

ASP.NET Core SignalR에는 HubPipeline 모듈에 대한 지원이 없습니다.

클라이언트의 차이점

TypeScript

ASP.NET Core SignalR 클라이언트는 TypeScript로 작성됩니다. JavaScript 클라이언트를 사용하는 경우 JavaScript 또는 TypeScript로 작성할 수 있습니다.

JavaScript 클라이언트는 npm에서 호스팅됩니다.

ASP.NET 버전에서 JavaScript 클라이언트를 Visual Studio의 NuGet 패키지를 통해 가져옵니다. ASP.NET Core 버전에서 @microsoft/signalr npm 패키지는 JavaScript 라이브러리를 포함합니다. 이 패키지는 ASP.NET Core 웹 애플리케이션 탬플릿에 포함되지 않습니다. npm을 사용하여 @microsoft/signalr npm 패키지를 가져오고 설치합니다.

npm init -y
npm install @microsoft/signalr

ASP.NET 버전에서 JavaScript 클라이언트를 Visual Studio의 NuGet 패키지를 통해 가져옵니다. ASP.NET Core 버전에서 @aspnet/signalr npm 패키지는 JavaScript 라이브러리를 포함합니다. 이 패키지는 ASP.NET Core 웹 애플리케이션 탬플릿에 포함되지 않습니다. npm을 사용하여 @aspnet/signalr npm 패키지를 가져오고 설치합니다.

npm init -y
npm install @aspnet/signalr

jQuery

jQuery에 대한 종속성이 제거되었지만 프로젝트에서 jQuery를 계속 사용할 수 있습니다.

Internet Explorer 지원

ASP.NET Core SignalR은 Microsoft Internet Explorer를 지원하지 않지만 ASP.NET SignalR은 Microsoft Internet Explorer 8 이상을 지원합니다. 자세한 내용은 ASP.NET Core SignalR이 지원되는 플랫폼을 참조하세요.

JavaScript 클라이언트 메서드 구문

JavaScript 구문이 ASP.NET SignalR 버전에서 변경되었습니다. $connection 개체를 사용하는 대신 HubConnectionBuilder API를 사용하여 연결을 만듭니다.

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

on 메서드를 사용하여 허브에서 호출할 수 있는 클라이언트 메서드를 지정합니다.

JavaScript 구문이 ASP.NET SignalR 버전에서 변경되었습니다. $connection 개체를 사용하는 대신 HubConnectionBuilder API를 사용하여 연결을 만듭니다.

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

on 메서드를 사용하여 허브에서 호출할 수 있는 클라이언트 메서드를 지정합니다.

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);
});

클라이언트 메서드를 만든 후 허브 연결을 시작합니다. catch 메서드를 연결하여 오류를 기록하거나 처리합니다.

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

허브 프록시

허브 프록시는 더 이상 자동으로 생성되지 않습니다. 대신 메서드 이름이 호출 API에 문자열로 전달됩니다.

허브 프록시는 더 이상 자동으로 생성되지 않습니다. 대신 메서드 이름이 호출 API에 문자열로 전달됩니다.

.NET 및 기타 클라이언트

Microsoft.AspNetCore.SignalR.Client NuGet 패키지는 ASP.NET Core SignalR에 대한 .NET 클라이언트 라이브러리를 포함합니다.

HubConnectionBuilder를 사용하여 허브에 대한 연결의 인스턴스를 만들고 빌드합니다.

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

스케일 아웃 차이점

ASP.NET SignalR은 SQL Server 및 Redis를 지원합니다. ASP.NET Core SignalR은 Azure SignalR Service 및 Redis를 지원합니다.

ASP.NET

ASP.NET Core

추가 리소스