ASP.NET Core 的 SignalR 不使用 websockets 但使用长轮询
SignalR with ASP.NET Core doesnt use websockets but long polling
我刚刚用 ASP.NET Core 和 SignalR 做了简单测试(我用的是这个版本 - 0.1.0-rtm-21431 -https://www.myget.org/feed/aspnetmaster/package/nuget/Microsoft.AspNetCore.SignalR.Server - 我猜这是 .NET Core 支持的最新版本,但是当我错了纠正我)并注意到它正在使用长轮询(我使用 Charles 嗅探 http 请求)。
我用 SignalR 2.2.1 为 ASP.NET 4.6.1 做了同样的测试 - https://www.nuget.org/packages/Microsoft.AspNet.SignalR/ 并且它使用 WebSockets 很好。
我注意到使用长轮询时我的测试应用程序明显变慢,有时客户端之间存在差异。
知道为什么 SignalR for AspNetCore 不使用 WebSockets 而是使用长轮询吗?是我的配置错误还是 .NET Core 的 SignalR 还不支持 websockets?
要使用 websockets,您需要先启用 websockets 中间件。
来自官方SignalR sample:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
app.UseFileServer();
app.UseWebSockets();
app.UseSignalR<RawConnection>("/raw-connection");
app.UseSignalR();
}
尽管并非每个 OS 都支持 websockets(需要 Win8 或更高版本或 Windows Server 2012 或 2008 R2 及更高版本),因此它们仍然可能会退回到长轮询。
截至撰写本文时,唯一可与 ASP.NET Core 1.0.0 兼容的版本是 0.1.0-rtm-21431
。
所有较新版本都是针对 ASP.NET 核心夜间构建构建的,这也需要 .NET Core runtime/SDK 的夜间版本。不建议使用夜间构建,除非您正在为 ASP.NET Core 1.1 编写一些库,因为夜间构建经常由于不完整的包构建和最新 .NET Core 运行时的要求而中断。
我刚刚用 ASP.NET Core 和 SignalR 做了简单测试(我用的是这个版本 - 0.1.0-rtm-21431 -https://www.myget.org/feed/aspnetmaster/package/nuget/Microsoft.AspNetCore.SignalR.Server - 我猜这是 .NET Core 支持的最新版本,但是当我错了纠正我)并注意到它正在使用长轮询(我使用 Charles 嗅探 http 请求)。
我用 SignalR 2.2.1 为 ASP.NET 4.6.1 做了同样的测试 - https://www.nuget.org/packages/Microsoft.AspNet.SignalR/ 并且它使用 WebSockets 很好。
我注意到使用长轮询时我的测试应用程序明显变慢,有时客户端之间存在差异。
知道为什么 SignalR for AspNetCore 不使用 WebSockets 而是使用长轮询吗?是我的配置错误还是 .NET Core 的 SignalR 还不支持 websockets?
要使用 websockets,您需要先启用 websockets 中间件。
来自官方SignalR sample:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
app.UseFileServer();
app.UseWebSockets();
app.UseSignalR<RawConnection>("/raw-connection");
app.UseSignalR();
}
尽管并非每个 OS 都支持 websockets(需要 Win8 或更高版本或 Windows Server 2012 或 2008 R2 及更高版本),因此它们仍然可能会退回到长轮询。
截至撰写本文时,唯一可与 ASP.NET Core 1.0.0 兼容的版本是 0.1.0-rtm-21431
。
所有较新版本都是针对 ASP.NET 核心夜间构建构建的,这也需要 .NET Core runtime/SDK 的夜间版本。不建议使用夜间构建,除非您正在为 ASP.NET Core 1.1 编写一些库,因为夜间构建经常由于不完整的包构建和最新 .NET Core 运行时的要求而中断。