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에서:
- 자동 다시 연결은 .NET 클라이언트 와 JavaScript 클라이언트 모두에서 옵트인됩니다.
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, "&").replace(/</g, "<").replace(/>/g, ">");
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
추가 리소스
ASP.NET Core