使用ASP.NET Core的SignalR不使用websockets但使用长轮询

mon*_*oh_ 3 c# asp.net signalr asp.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而是长轮询吗?是我的配置错误还是SignalR for .NET Core不支持websockets?

Tse*_*eng 10

要使用websockets,您需要首先启用websockets中间件.

来自SignalR的官方样本:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(LogLevel.Debug);

        app.UseFileServer();

        app.UseWebSockets();
        app.UseSignalR<RawConnection>("/raw-connection");
        app.UseSignalR();
    }
Run Code Online (Sandbox Code Playgroud)

虽然每个操作系统(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运行时的需求而中断.