SignalR首次连接正常,但启动重新连接时,它不会完成重新连接

时间:2016-03-11 06:41:45

标签: asp.net angularjs signalr signalr.client

我正在使用SignalR将通知推送到角度应用程序。

之前我已经开始工作了(虽然看起来有点不稳定),现在我遇到了有关重新连接的更多问题。

我已经到了盯着文档的演示代码的地步,而其他人的代码似乎从来没有像SignalR那样在SignalR中工作。所以我发布了我的代码,看看是否有任何我不能正常做错的事情,这些信息不允许SignalR一致地工作,并且能够一致地启动,重新连接和断开连接。

我有一个如下所示的通知服务:

.factory('Notification', ['$rootScope', '$log', '$localstorage', 'User', 'ENV', 'Events',
    function ($rootScope, $log, $localstorage, User, ENV, Events) {
        var self = this;

        this.proxy = null;
        this.connection = null;
        this.initializeSockets = function () {

            self.connection  = $.hubConnection(ENV.socketEndpoint, { useDefaultPath: true, logging: true })
            self.connection.qs = { token: User.getToken() };
            self.proxy = self.connection.createHubProxy('notificationEmitter');
            self.proxy.on('onNotification', function (notification) {
                $rootScope.$emit(notification.Topic, notification.Data);
            });

            if (self.connection.state === $.signalR.connectionState.disconnected) {
                self.connection.start(function () {})
                    .done(function (conn) {
                    $log.info('Connected to notification emitter');
                }).fail(function (a) {
                    $log.info('Unable to connect to connect:' + a)
                });
            }

            self.connection.starting = function (data) {
                $log.info('starting'); -> NEVER SEEMS TO GET CALLED
            }
            self.connection.disconnected = function (data) {
                $log.info('disconnected'); -> NEVER SEEMS TO GET CALLED
                setTimeout(function () {
                    proxy.connection.start();
                }, 20000); // Restart connection after 5 seconds
            };

            self.connection.reconnecting = function (data) {
                $log.info('reconnecting');
            }
            self.connection.reconnected = function (data) {
                $log.info('reconnected');
            }
            self.connection.connectionSlow = function (data) {
                $log.info('connectionSlow');
            }
            self.connection.error = function(error){
                $log.info('Signal R Error:' + error);
            }
        }

        $rootScope.$on(Events.userAuthenticated, function (event, user) {
            self.initializeSockets();
        })

        return self;

    }])

正如我所提到的,它似乎在我第一次开始工作的大部分时间连接,但在第一页刷新之后(以及每次之后)我从SignalR日志中获得以下内容。

enter image description here

1 个答案:

答案 0 :(得分:0)

  

开始:在通过连接发送任何数据之前引发。

所以它与连接无关。

  

SignalR Hub中的OnReconnected事件处理程序可以直接执行   在OnConnected之后但不在给定客户端的OnDisconnected之后。该   因为你可以重新连接而不断开连接   有几种方法可以使用“#34; connection"用于   SignalR。

连接后重新连接。所以你从未见过断线连接,这是正常的。

  

如果客户端在没有机会调用Stop的情况下停止运行   方法,服务器等待客户端重新连接,然后结束   断开连接超时后的SignalR连接。

所以每个刷新页面实际上都是这样做的。您停止运行连接而不调用Stop。

如果您没有任何问题,这个生命周期很正常。

检查more