2015-12-15 29 views
0

我有一個使用SignalR的角度應用程序。當用戶通過身份驗證時,我初始化到服務器的連接。我相信,如果客戶在一段時間後不活動,它將斷開連接。使用下面的代碼,如果它與不活動斷開,我將如何重新連接?如果從靜止狀態連接超時,我如何刷新SignalR連接

var initializeSockets = function(){ 
    self.proxy = null; 
    var connection = $.hubConnection(ENV.socketEndpoint,{ 
     qs: {token:User.getToken()}, 
     logging: false, 
     useDefaultPath: false 
    }); 
    self.proxy = connection.createHubProxy('messageCreatedEmitter'); 
    self.proxy.on('onMessageCreated',function(data){ 
    //the following is wrapped in a try catch 
    //because it will break in a browser, and 
    //will not allow the message to be emitted 
    try { 
     Alert.messageReceived(); 
    } catch (e) { 
    } 
    $rootScope.$emit('Messages:messageReceived',data); 
    }) 

    if($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected 
    || $.connection.hub.state === undefined){ 
    connection.start().done(function(){ 
     $log.info('connected'); 
    }) 
    } 
} 

$rootScope.$on('User:userAuthenticated',function(event,user){ 
    initializeSockets(); 
}) 
+0

你確定它是從不活動中斷開而不會自動重新連接嗎? – Tracker1

+0

嗯,我知道這樣做,但我假設在一段時間的不活動之後,它會斷開連接。我錯了嗎? – TheJediCowboy

+0

我不確定,我知道SignalR有一個非常強大的回退/重新連接系統......您可能想每隔幾分鐘發送一次「ping」消息,以確保節點處於活動狀態。 *除非您*希望*在不活動後斷開連接。 – Tracker1

回答

1

您可以注意斷開連接並重新連接;

$.connection.yourHubName.client.disconnect(function() { 
    $.connection.hub.start(); 
}); 
+0

我想這較早,但它告訴我,'$ .connection.hub.disconnect(...)'不是一個函數 – TheJediCowboy

+0

@TheJediCowboy固定 –

+0

@TheJediCowboy - 你可以使用$ .connection.hub.disconnected(.. )參考:https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client –