This change does 2 things: - It disables the websocket keep alive since SignalR has its own bidirectional pings. This should remove a significant timer overhead per WebSocket connection that we end up with today. We have a single timer that sends to all connection on an interval. - Don't pass the CancellationToken to ReadAsync in the handshake since the Pipe implementation holds onto the token for longer than it needs to which keeps Timer objects alive (see dotnet/corefx#32806) I found this when reading the source code and looking at dumps of a couple of SignalR applications. |
||
|---|---|---|
| .. | ||
| Common | ||
| Microsoft.AspNetCore.Http.Connections | ||
| Microsoft.AspNetCore.Http.Connections.Client | ||
| Microsoft.AspNetCore.Http.Connections.Common | ||
| Microsoft.AspNetCore.SignalR | ||
| Microsoft.AspNetCore.SignalR.Client | ||
| Microsoft.AspNetCore.SignalR.Client.Core | ||
| Microsoft.AspNetCore.SignalR.Common | ||
| Microsoft.AspNetCore.SignalR.Core | ||
| Microsoft.AspNetCore.SignalR.Protocols.Json | ||
| Microsoft.AspNetCore.SignalR.Protocols.MessagePack | ||
| Microsoft.AspNetCore.SignalR.Redis | ||
| Microsoft.AspNetCore.SignalR.Specification.Tests | ||
| Microsoft.AspNetCore.SignalR.StackExchangeRedis | ||
| Directory.Build.props | ||