2016-03-11 76 views
3

我正在使用SignalR將通知推送到角度應用程序。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

回答

0

首發:升高之前通過該連接發送任何數據。

所以它與連接無關。

在SignalR樞紐OnReconnected事件處理程序可以OnConnected後直接 執行,但不OnDisconnected對於給定的客戶端之後。 因爲您可以重新連接而沒有斷開連接,因此 有幾種方法可以在 SignalR中使用「連接」一詞。

連接後發生重新連接。所以這是正常的,你從來沒有見過斷線日​​志。

如果客戶端停止而不必機會調用Stop 方法運行時,服務器等待客戶端重新連接,然後結束 斷開的超時時段之後SignalR連接。

因此,每一個刷新頁面,你實際上這樣做。您不必調用Stop就停止運行連接。

如果你沒有任何問題,這個生命週期是非常正常的。

檢查more