som*_*guy 5 signalr blazor asp.net-core-6.0
搜索主题:
在上面的文章中,如果看到设置超时的示例。而且文档还解释了客户端和服务器端,每个 ofc 都可能突然崩溃/关闭,或者网络可能被切断等。所以双方似乎都有超时来做不同的事情,比如“向下”(=试图重新连接),最后“关闭”。所以...
问题#1:如何分别为客户端和服务器设置所有(至少 4 个)超时(包括保持活动状态)?
SO帖子显示了JS的答案和program.cs中的答案,有什么区别?它实际上是服务器/客户端吗?客户端启动时可以用C#设置还是需要用JS设置?如果是这样,相关文档在哪里?
问题#2:如何知道服务器端超时?
我从默认模板 (.NET 6) 创建了一个全新的 Blazor 服务器项目,并添加了 SO 帖子中的代码以查看所有电路。当我在 LAN 中运行它并且客户端(其他 PC)打开 Clicker,然后将 PC 置于完全休眠状态时,我看到了该OnConnectionDownAsync
事件,但即使在 2 分钟后,也没有OnCircuitClosedAsync
(它实际上也有效。之后打开 PC 2mins 实际上会让浏览器重新连接并OnConnectionUpAsync
自动启动,无需OnCircuitOpenedAsync
)。为什么?超时时间真的很长吗?我在哪里可以读取默认超时的变量,在哪里设置它?服务器保留线路信息多长时间,以便客户端可以重新连接?这不是 5 秒(请参阅上面的链接)。
更新:另一项测试确认断开连接超时似乎正好是 3 分钟(180 秒)。现在我需要了解如何设置它。注意:似乎不是options.WebSockets.CloseTimeout
。
也不是options.ClientTimeoutInterval
。
该文档说了一些关于
Application_Start
在你的Global.asax
我从未读过相关内容。那是什么?这实际上是针对 Blazor 还是其他一些 ASP.NET 项目类型。这是唯一(正确)的方法吗?[编辑:它适用于较旧的框架,而不是 ASP.NET Core 6+]
问题 #3:提到的 5 秒超时是多少?它的观察。服务器完全关闭之前不会超时。
问题 #4AddHubOptions
:...和MapBlazorHub...options
...之间有什么区别?
services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromMinutes(10);
options.KeepAliveInterval = TimeSpan.FromSeconds(3);
options.HandshakeTimeout = TimeSpan.FromMinutes(10);
});
Run Code Online (Sandbox Code Playgroud)
和
app.UseEndpoints(endpoints =>
// other settings go here
endpoints.MapBlazorHub(options => {
options.WebSockets.CloseTimeout = new TimeSpan(1, 1, 1);
options.LongPolling.PollTimeout = new TimeSpan(1, 0, 0);
})
);
Run Code Online (Sandbox Code Playgroud)
更新:似乎上面的链接指的是旧版本... 这可能是新版本。我希望它能发出一些光芒……
它已经回答了这个:
CloseTimeout 5 秒
服务器关闭后,如果客户端在该时间间隔内未能关闭,则连接被终止。
这是什么意思,“它可能需要更长的时间”,从来没有说过它正好是 180 秒,如果它是错误的,为什么还要有变量?
ClientTimeoutInterval 30 秒
如果在此时间间隔内没有收到消息(包括保持连接),则服务器认为客户端已断开连接。由于实现方式的原因,客户端可能需要比此超时间隔更长的时间才能被标记为断开连接。建议的值是 KeepAliveInterval 值的两倍。
[更新]:
这似乎是新文档。这回答了我的一些问题(部分)。我仍然不完全清楚所有选项如何协同工作,并且缺少一个很好的工作示例(所有选项都应用并演示了)。
特别是客户端超时似乎有点不一致和令人困惑,请参阅我的其他有关 SignalR 计时间隔的问题。