【问题标题】:Auto reconnect SignalR client when server restart服务器重新启动时自动重新连接 SignalR 客户端
【发布时间】:2020-01-01 09:50:22
【问题描述】:

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

但出于任何需要重新启动服务器的原因,我看到了以下错误:

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

有没有什么方法可以检查服务器并重新连接而不刷新?

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

【问题讨论】:

    标签: angular asp.net-core aspnetboilerplate asp.net-core-signalr


    【解决方案1】:

    这已在模板的 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();
    });
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2015-11-20
      • 2011-04-16
      • 2015-03-10
      • 1970-01-01
      • 2020-09-05
      • 2015-10-23
      相关资源
      最近更新 更多