如何检测事件从最后两分钟没有获得触发器

时间:2016-06-20 12:39:06

标签: node.js express socket.io

我正在为管理员客户(nodejs + socketio + express)进行实时聊天。在客户等待超过两分钟进行管理员回复的聊天之间我需要向客户方显示消息“请稍后再尝试”

例如客户端从此事件获得响应

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

});

如何跟踪此事件不会在最后两分钟内触发?

2 个答案:

答案 0 :(得分:1)

您可以将套接字事件包装到observable,然后只需使用.debounce运算符来触发"请稍后再尝试"不活动2分钟后的文本(未经测试):

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 */ 
    });

答案 1 :(得分:1)

一种简单的方法如下:

var timeout=setTimeout(sendMessage,120000);

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

对于更大的应用程序,我会将最后发送时间(和其他信息)存储在定义连接的Object中。让常规流程查找没有活动的连接,并进行适当处理。