Azure 上的 SignalR 长断开连接超时
SignalR long disconnection timeout on Azure
我有一个 ASP 带有 SignalR 的 .Net Core 服务器应用程序。还有一个客户端应用程序也是用 .Net Core 和 SignalR 编写的。客户端连接到服务器,它们一起工作。
在本地开发环境中工作时,一切都按预期工作,但是当我将我的服务器应用程序部署到 Azure 应用程序服务时,我发现了奇怪的行为。
当客户端与服务器断开连接时,客户端断开连接的事件伴随着约 30 秒的巨大延迟。虽然客户端和服务器之间的其他调用正常工作,但我们仅在客户端断开连接事件时观察到延迟。
在调查此问题时,我提出了减少服务器设置中 KeepAliveInterval
的解决方案;
.AddSignalR(configure =>
{
configure.EnableDetailedErrors = true;
configure.MaximumReceiveMessageSize = null;
configure.KeepAliveInterval = TimeSpan.FromSeconds(1);
configure.EnableDetailedErrors = true;
});
然后客户端断开连接事件是即时的。
有人可以解释为什么这个问题出现在 Azure 的发布版本上吗?
本地开发环境没有出现该问题。
本地Release环境没有出现该问题
在 SignalR
集线器中 OnReconnected
事件处理程序可以在 OnConnected
之后直接执行,但不能在给定客户端的 OnDisconnected
之后执行。重连不掉线的原因有几种here
物理连接速度可能很慢或连接中断。根据中断时间长短等因素,传输连接可能会断开。 SignalR
然后尝试重新建立传输连接。有时传输连接API检测到中断并丢弃传输连接,SignalR
立即发现连接丢失.
在其他情况下,transport connection API
和 SignalR
都不会立即意识到 连接已丢失 。对于除长轮询之外的所有传输,SignalR client
使用一个名为 keepalive 的函数来检查传输 API 无法检测。有关长轮询连接的信息,请参阅此处 Timeout and keepalive settings l
参考更多info
我有一个 ASP 带有 SignalR 的 .Net Core 服务器应用程序。还有一个客户端应用程序也是用 .Net Core 和 SignalR 编写的。客户端连接到服务器,它们一起工作。
在本地开发环境中工作时,一切都按预期工作,但是当我将我的服务器应用程序部署到 Azure 应用程序服务时,我发现了奇怪的行为。
当客户端与服务器断开连接时,客户端断开连接的事件伴随着约 30 秒的巨大延迟。虽然客户端和服务器之间的其他调用正常工作,但我们仅在客户端断开连接事件时观察到延迟。
在调查此问题时,我提出了减少服务器设置中 KeepAliveInterval
的解决方案;
.AddSignalR(configure =>
{
configure.EnableDetailedErrors = true;
configure.MaximumReceiveMessageSize = null;
configure.KeepAliveInterval = TimeSpan.FromSeconds(1);
configure.EnableDetailedErrors = true;
});
然后客户端断开连接事件是即时的。
有人可以解释为什么这个问题出现在 Azure 的发布版本上吗?
本地开发环境没有出现该问题。
本地Release环境没有出现该问题
在 SignalR
集线器中 OnReconnected
事件处理程序可以在 OnConnected
之后直接执行,但不能在给定客户端的 OnDisconnected
之后执行。重连不掉线的原因有几种here
物理连接速度可能很慢或连接中断。根据中断时间长短等因素,传输连接可能会断开。 SignalR
然后尝试重新建立传输连接。有时传输连接API检测到中断并丢弃传输连接,SignalR
立即发现连接丢失.
在其他情况下,transport connection API
和 SignalR
都不会立即意识到 连接已丢失 。对于除长轮询之外的所有传输,SignalR client
使用一个名为 keepalive 的函数来检查传输 API 无法检测。有关长轮询连接的信息,请参阅此处 Timeout and keepalive settings l
参考更多info