将SignalR添加到Asp Net Core项目会更改所有websockets设置?

v7pvogib  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个asp net核心应用程序,它严重依赖于websockets(ClientWebSocket和从httpContext检索的常规WebSocket)。
我现在还想将SignalR功能添加到我的应用程序中(不是为了替换现有的功能,因为这两个功能来自外部)。但是我看到那个电话

builder.Services.AddSignalR();

并禁用WebSocket保持活动功能。(这是它的叫法)

// Disable the WebSocket keep alive since SignalR has it's own
    services.Configure<WebSocketOptions>(o => o.KeepAliveInterval = TimeSpan.Zero);

我可以尝试使用AddSignalR的重载方法,如下所示

builder.Services.AddSignalR(options =>
{
    options.KeepAliveInterval = TimeSpan.FromSeconds(15);
});

但这将改变所有的WebSocketOptionsSignalR和其他类似的(违背目的)。除了SignalR之外,有没有办法将我所有的WebSocketOptions都保持为默认值?

up9lanfz

up9lanfz1#

除了SignalR之外,是否没有办法将我所有的WebSocketOptions都保持为默认值?
实际上,根据你的场景和描述,我想提的是,SignalR已经在WebSockets上引入,以改善WebSockets中发现的潜在缺点,SignalR已经大大克服了这一点。因此,不建议将signalR和WebSockets集成在一起。
但是,如果你仍然想保持现有的WebSocket配置,你应该配置WebSockets中间件,并使用UseWebSockets注入你的自定义配置。因此,这样您现有的WebSockets设置将占上风。您可以按以下方式进行配置:

var webSocketOptions = new WebSocketOptions
{
    KeepAliveInterval = TimeSpan.FromSeconds(2)
};


builder.Services.AddSignalR(options =>
{
    options.KeepAliveInterval = TimeSpan.FromSeconds(15);
});

var app = builder.Build();

app.MapGet("/", () => "SignalR hub is running...!");

app.UseDefaultFiles();
app.UseStaticFiles();

app.UseWebSockets(webSocketOptions);

输出:

**注意:**如您所见,WebSocket的alive间隔时间保持不变。此外,我想说的是,它不建议,这可能会导致性能问题。除此之外,您可以在官方文件中获得更多细节。

相关问题