2016-08-05 93 views
3

我剛剛做了ASP.NET Core和SignalR的簡單測試(我使用了這個版本 - 0.1.0 -rtm-21431-https://www.myget.org/feed/aspnetmaster/package/nuget/Microsoft.AspNetCore.SignalR.Server-猜測它是最新版本。 NET核心支持,但當我錯了糾正我),並注意到它使用長輪詢(我嗅探使用查爾斯http請求)。SignalR with ASP.NET Core does not use websockets but long polling

我對SignalR 2.2.1 - https://www.nuget.org/packages/Microsoft.AspNet.SignalR/做了與ASP.NET 4.6.1相同的測試,它使用WebSockets很好。

我注意到,長時間輪詢我的測試應用程序顯然比較慢,有時客戶端之間有差異。

任何想法爲什麼SignalR爲AspNetCore不使用WebSockets但長輪詢,而不是?是我的配置錯誤還是SignalR for .NET Core不支持websockets?

+0

你在哪個操作系統上運行它? – Tseng

+1

您是否在IIS中安裝/啓用websocket? –

+1

https://github.com/aspnet/SignalR-Server/blob/dev/samples/SignalRSample.Web/Startup.cs#L25用於啓用Websocket,儘管它們在任何操作系統上都不受支持,所以它仍然可能會回退到如果您在某些操作系統上運行,則需要長時間輪詢 – Tseng

回答

7

爲了使用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(); 
    } 

的WebSockets雖然不支持所有的操作系​​統(Win8的或更高的要求或Windows Server 2012或2008 R2及更高版本),所以他們仍然可能回落到長輪詢。

截至本文撰寫之時,可與ASP.NET Core 1.0.0一起使用的唯一兼容版本是0.1.0-rtm-21431

所有較新的版本都是針對ASP.NET Core每晚構建而構建的,這些構建還需要夜間版本的.NET Core runtime/SDK。不建議使用每晚構建,除非您正在爲ASP.NET Core 1.1編寫一些庫,因爲由於不完整的包構建和最新的.NET Core運行時需求,經常會每晚構建中斷。

+1

在ASP.NET核心,在IIS之外。 WebSockets無處不在。實現不依賴於Windows(因爲.NET Core *是*跨平臺) – davidfowl

+0

@davidfowl:感謝您的信息。因此,當使用IIS作爲反向代理託管ASP.NET Core時,即使使用'app.UseWebSockets()'中間件,操作系統限制仍然適用? – Tseng

+0

是的。由於您需要支持不透明升級的IIS版本,因此只有Windows> = 8才能提供該功能。 – davidfowl

相關問題