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

时间:2016-08-05 17:41:18

标签: 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 - https://www.nuget.org/packages/Microsoft.AspNet.SignalR/对ASP.NET 4.6.1进行了相同的测试,它使用了WebSockets。

我注意到,使用长轮询我的测试应用程序显然较慢,有时客户端之间存在差异。

任何想法为什么SignalR for AspNetCore不使用WebSockets而是长轮询?是我的配置错误还是SignalR for .NET Core还不支持websockets?

1 个答案:

答案 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运行时的需求而中断。