diff options
author | jacalvar <jacalvar@microsoft.com> | 2022-05-13 18:33:27 +0300 |
---|---|---|
committer | jacalvar <jacalvar@microsoft.com> | 2022-06-14 17:24:20 +0300 |
commit | 0fe30c5f44868cfd47513927d552131c616e44da (patch) | |
tree | 1a90a37b9de2cd0b95e5362776a19bee925608fd | |
parent | 4a8df25d1c93022abaa3f547d065bbc1d6ce3e5e (diff) |
[Blazor][SignalR] Proof of concept. Enabling compression in websocketsjaviercn/websockets-compression-signalr
4 files changed, 11 insertions, 2 deletions
diff --git a/src/Components/Samples/BlazorServerApp/Startup.cs b/src/Components/Samples/BlazorServerApp/Startup.cs index d630a127c2..b4eb99bdc0 100644 --- a/src/Components/Samples/BlazorServerApp/Startup.cs +++ b/src/Components/Samples/BlazorServerApp/Startup.cs @@ -44,7 +44,7 @@ public class Startup app.UseEndpoints(endpoints => { - endpoints.MapBlazorHub(); + endpoints.MapBlazorHub(options => options.WebSockets.WebSocketAcceptContextFactory = context => new WebSocketAcceptContext { DangerousEnableCompression = true}); endpoints.MapFallbackToPage("/_Host"); }); } diff --git a/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs b/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs index 67de725c62..8f5159c66b 100644 --- a/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs +++ b/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs @@ -47,8 +47,9 @@ internal sealed partial class WebSocketsServerTransport : IHttpTransport Debug.Assert(context.WebSockets.IsWebSocketRequest, "Not a websocket request"); var subProtocol = _options.SubProtocolSelector?.Invoke(context.WebSockets.WebSocketRequestedProtocols); + var acceptContext = _options.WebSocketAcceptContextFactory?.Invoke(context); - using (var ws = await context.WebSockets.AcceptWebSocketAsync(subProtocol)) + using (var ws = await (acceptContext != null ? context.WebSockets.AcceptWebSocketAsync(acceptContext) : context.WebSockets.AcceptWebSocketAsync(subProtocol))) { Log.SocketOpened(_logger, subProtocol); diff --git a/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt b/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt index 7dc5c58110..fde2e9049c 100644 --- a/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt +++ b/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt @@ -1 +1,3 @@ #nullable enable +Microsoft.AspNetCore.Http.Connections.WebSocketOptions.WebSocketAcceptContextFactory.get -> System.Func<Microsoft.AspNetCore.Http.HttpContext!, Microsoft.AspNetCore.Http.WebSocketAcceptContext!>? +Microsoft.AspNetCore.Http.Connections.WebSocketOptions.WebSocketAcceptContextFactory.set -> void diff --git a/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs b/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs index 139aad4beb..f542815e64 100644 --- a/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs +++ b/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs @@ -26,4 +26,10 @@ public class WebSocketOptions // https://github.com/aspnet/HttpAbstractions/blob/a6bdb9b1ec6ed99978a508e71a7f131be7e4d9fb/src/Microsoft.AspNetCore.Http.Abstractions/WebSocketManager.cs#L23 // Unfortunately, IList<T> does not implement IReadOnlyList<T> :( public Func<IList<string>, string>? SubProtocolSelector { get; set; } + + /// <summary> + /// Gets or sets a delegate that will be called when a new WebSocket is established to configure additional details about the connection + /// like the use of compression. + /// </summary> + public Func<HttpContext, WebSocketAcceptContext>? WebSocketAcceptContextFactory { get; set; } } |