- The connection state object is manipulated by multiple parties in a non thread safe way. This change introduces a semaphore that should be used by anyone updating or reading the connection state. - Handle cases where there's an active request for a connection id and another incoming request for the same connection id, sse and websockets 409 and long polling kicks out the previous connection (https://github.com/aspnet/SignalR/issues/27 and https://github.com/aspnet/SignalR/issues/4) - Handle requests being processed for disposed connections. There was a race where the background thread could remove and clean up the connection while it was about to be processed. - Synchronize between the background scanning thread and the request threads when updating the connection state. - Added `DisposeAndRemoveAsync` to the connection manager that handles`DisposeAsync` throwing and properly removes connections from connection tracking. - Added Start to ConnectionManager so that testing is easier (background timer doesn't kick in unless start is called). - Added RequestId to connection state for easier debugging and correlation (can easily see which request is currently processing the logical connection). - Added tests |
||
|---|---|---|
| .. | ||
| Properties | ||
| ConnectionManagerTests.cs | ||
| HttpConnectionDispatcherTests.cs | ||
| LongPollingTests.cs | ||
| Microsoft.AspNetCore.Sockets.Tests.xproj | ||
| ServerSentEventsTests.cs | ||
| WebSocketsTests.cs | ||
| project.json | ||