【问题标题】:SignalR long disconnection timeout on AzureAzure 上的 SignalR 长时间断开连接超时
【发布时间】:2021-08-10 08:41:18
【问题描述】:

我有一个带有 SignalR 的 ASP .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 上的发布版本会出现此问题吗?

本地开发环境中没有出现此问题。

本地发布环境中没有发生此问题。

【问题讨论】:

    标签: azure-web-app-service signalr


    【解决方案1】:

    SignalR 集线器中,OnReconnected 事件处理程序可以直接在OnConnected 之后执行,但不能在给定客户端的OnDisconnected 之后执行。重连不掉线的原因有几种here

    物理连接可能很慢或连接可能中断。根据中断时长等因素,传输连接可能会断开。 SignalR 然后尝试重新建立传输连接。有时传输连接 API 检测到中断并断开传输连接,SignalR立即发现连接丢失

    在其他情况下,transport connection APISignalR 都不会立即意识到连接已丢失。对于除长轮询之外的所有传输,SignalR client 使用名为 keepalive 的函数来检查传输 API 无法检测到的连接丢失。有关长轮询连接的信息,请参阅此处Timeout and keepalive settingsl

    更多请参考info

    【讨论】:

    • 好的,这可以解释超时,但为什么这个过程在 Azure 生产环境中需要大约 30 秒,但在本地开发/发布环境中是立即的。
    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多