在服务器端 Blazor 中人为限制 SignalR 连接

nul*_*ter 5 signalr blazor-server-side

为了在慢速/不可靠的网络上测试我的 Blazor 应用程序,我正在寻找一种方法来人为地限制发送到 Blazor 或从 Blazor 发送的 Websocket 消息。不幸的是 Chrome 仍然不支持限制 websocket 连接。

我深入研究了 ASP.NET SignalR 代码的内部,但找不到任何可以扩展的明显服务,也没有找到任何添加 SignalR 中间件的简单方法。

扩展HubDispatcher看起来最有前途,但这是一个内部类。

Blazor 或 SignalR 类中是否有可用的消息处理扩展点?

Joh*_*ohn 2

我设法用 s 做到这一点HubFilter

public class LaggingHubFilter : IHubFilter
{
    public async ValueTask<object> InvokeMethodAsync(HubInvocationContext invocationContext, Func<HubInvocationContext, ValueTask<object>> next)
    {
        await Task.Delay(200).ConfigureAwait(true);

        return await next(invocationContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其注册到Program.cs

services.AddServerSideBlazor().AddHubOptions(h => h.AddFilter<LaggingHubFilter>());
Run Code Online (Sandbox Code Playgroud)