2017-05-19 3 views
0

이처럼 angularjs 팩토리에 SignalR 허브 프록시가 있습니다.SignalR 연결이 닫혀 있지만 angularjs 범위가 파손 된 후에도 작동합니다.

var app = angular.module('app'); 

app.factory("signalRHubProxy", ['$rootScope', "$timeout", function ($rootScope, $timeout) { 
    function signalRHubProxyFactory(serverUrl, hubName) { 
     var connection = $.hubConnection(serverUrl); 
     var proxy = connection.createHubProxy(hubName); 

     connection.disconnected(function() { 
      $timeout(function() { 
       connection.start(); 
      }, 5000) 
     }); 

     return { 
      on: function (eventName, callback) { 
       proxy.on(eventName, function (result) { 
        $rootScope.$apply(function() { 
         if (callback) { 
          callback(result); 
         } 
        }); 
       }); 

       connection.start(); 
      }, 
      stop: function() { 
       connection.stop(); 
      }, 
      connection: connection 
     }; 
    } 

    return signalRHubProxyFactory; 
}]); 

때때로 서버가 수신 대기하지 않기 때문에 연결 시간 초과가 사용되었으므로 다시 시도 할 수 있습니다.

app.controller("directiveController", function($scope, signalRHubProxy){ 

    var signalRProxy = signalRHubProxy(
      "url", 
      "hubname"); 

    signalRHubProxy.on("datapush", function(data){ 

    }); 

     $scope.$destroy(function(){ 
     signalRHubProxy.stop(); 
     ??? how to kill signalr hub 
     }) 
}) 

을하지만 내 지시를 제거 할 때, signalR는 여전히 작동 : 내 컨트롤러에서,이 팩토리를 사용하고 있습니다.

답변

0

stop()으로 전화하면 disconnected 이벤트가 발생하며 연결이 다시 시작됩니다. 그런 다음 바로 연결을 다시 시작하지 않으의 단선 (간단한 부울 변수) 의도적 있는지 확인해야 할 수 있습니다

또한
app.factory("signalRHubProxy", ['$rootScope', "$timeout", function ($rootScope, $timeout) { 
    function signalRHubProxyFactory(serverUrl, hubName) { 
     var connection = $.hubConnection(serverUrl); 
     var proxy = connection.createHubProxy(hubName); 

     var manualStop = false; 

     connection.connected(function() { 
      manualStop = false; // reset variable if connected 
     }); 

     connection.disconnected(function() { 
      if (manualStop) 
       return; 
      $timeout(function() { 
       connection.start(); 
      }, 5000) 
     }); 

     return { 
      on: function (eventName, callback) { 
       proxy.on(eventName, function (result) { 
        $rootScope.$apply(function() { 
         if (callback) { 
          callback(result); 
         } 
        }); 
       }); 

       connection.start(); 
      }, 
      stop: function() { 
       manualStop = true; 
       connection.stop(); 
      }, 
      connection: connection 
     }; 
    } 

    return signalRHubProxyFactory; 
}]); 

, $scope.$destroy가 호출되고 있는지 확인합니다. 내가 정말 몇 가지 중요한 차이가 있는지 모르겠지만


어떤 사람들은 대신 connection.stop();$.connection.hub.stop();를 호출하는 것이 좋습니다.