服务器重启时自动重新连接 SignalR 客户端

Auto reconnect SignalR client when server restart

我在 ASP.NET 样板项目中使用 ASP.NET Core SignalR,服务器启动时一切正常。

但是由于某种原因我需要重新启动服务器,我看到了这些错误:

而且我必须刷新我的网页才能重新连接到 SignalR。

有什么方法可以不刷新就检查服务器重连吗?

我使用 Angular 模板和 ABP v4.0.1 附带的默认 SignalR 客户端。

这已在模板的 v5.1.1 中修复:aspnetboilerplate/module-zero-core-template#498

重新连接循环

yarn upgrade abp-web-resources@^4.1.0

重新连接循环在 abp-web-resources@4.1.0 中可用:

// Reconnect loop
function start() {
    connection.start().catch(function () {
        setTimeout(function () {
            start();
        }, 5000);
    });
}

// Reconnect if hub disconnects
connection.onclose(function (e) {
    if (e) {
        abp.log.debug('Connection closed with error: ' + e);
    } else {
        abp.log.debug('Disconnected');
    }

    // if (!abp.signalr.autoConnect) {
    if (!abp.signalr.autoReconnect) {
        return;
    }

    // setTimeout(function () {
    //     connection.start();
    // }, 5000);
    start();
});

参考文献:

重新连接回路 + 断路器

yarn upgrade abp-web-resources@^5.1.1

断路器在 abp-web-resources@5.1.1 中可用:

// Reconnect loop
function tryReconnect() {
    if (tries > abp.signalr.maxTries) {
        return;
    } else {
        connection.start()
            .then(() => {
                reconnectTime = abp.signalr.reconnectTime;
                tries = 1;
                console.log('Reconnected to SignalR server!');
            }).catch(() => {
                tries += 1;
                reconnectTime *= 2;
                setTimeout(() => tryReconnect(), reconnectTime);
            });
    }
}

// Reconnect if hub disconnects
connection.onclose(function (e) {
    if (e) {
        abp.log.debug('Connection closed with error: ' + e);
    } else {
        abp.log.debug('Disconnected');
    }

    if (!abp.signalr.autoReconnect) {
        return;
    }

    // start();
    tryReconnect();
});

参考文献: