2016-06-20 4 views
1

Ich arbeite an Live-Chat für admin und Kunden (nodejs + socketio + Express). Dazwischen Chat, wenn Kunden mehr als zwei Minuten für die Admin-Antwort warten muss ich Nachricht an Kundenseite zeigen „bitte versuchen Sie es irgendwann später“Wie Ereignis zu erkennen nicht Trigger von den letzten zwei Minuten

zum Beispiel Client bekommen Antwort von diesem Ereignis

socket.on('Admin Response',function(msg){ 

}); 

Wie Verfolgen Sie dieses Ereignis nicht Trigger aus den letzten zwei Minuten?

Antwort

1

Ein einfaches Weg, dies zu tun, ist wie folgt:

var timeout=setTimeout(sendMessage,120000); 

socket.on('Admin Response',function(msg){ 
    clearTimeout(timeout); 
    var timeout=setTimeout(sendMessage,120000); 
}); 

Für eine größere Anwendung würde ich speichere letztes Mal (und andere Informationen) in einem Objekt, das die Verbindung definiert senden. Lassen Sie einen regulären Prozess nach Verbindungen ohne Aktivität suchen und behandeln Sie diese entsprechend.

1

Sie können wickeln die die Buchse Veranstaltung zu einem observable, dann benutzen Sie einfach den .debounce Operator nur lösen die „bitte irgendwann versuchen Sie es später“ Text nach 2 Minuten Inaktivität (ungetestet):

var adminResponses = Rx.Observable.fromEventPattern(
    function add (h) { 
     socket.on('Admin Response',h); 
    } 
).debounce(120000); //120000 ms = 2 mins 

var subscription = adminResponses.subscribe(
    function(msg) { 
     /* show "please try sometime later" text */ 
    });