我刚刚使用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 - https://www.nuget.org/packages/Microsoft.AspNet.SignalR/对ASP.NET 4.6.1进行了相同的测试,它使用了WebSockets。
我注意到,使用长轮询我的测试应用程序显然较慢,有时客户端之间存在差异。
任何想法为什么SignalR for AspNetCore不使用WebSockets而是长轮询?是我的配置错误还是SignalR for .NET Core还不支持websockets?
答案 0 :(得分:10)
要使用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();
}
虽然每个操作系统(Win8或更高版本或Windows Server 2012或2008 R2及更高版本)不支持websockets,但它们仍可能会回退到长轮询。
截至撰写本文时,可与ASP.NET Core 1.0.0一起使用的唯一兼容版本为0.1.0-rtm-21431
。
所有较新的版本都是针对ASP.NET Core夜间版本构建的,这些版本还需要每晚版本的.NET Core运行时/ SDK。除非您为ASP.NET Core 1.1编写一些库,否则不建议使用每晚构建,因为夜间构建经常由于不完整的包构建和最新.NET Core运行时的需求而中断。