如何检测事件不会从最后两分钟触发

我正在为pipe理员客户进行实时聊天(nodejs + socketio + express)。 在客户等待超过两分钟的时间内进行pipe理员响应时,我需要向客户端显示消息“请稍后再试”

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

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

如何跟踪这个事件不会从最后两分钟触发?

一个简单的方法来做到这一点如下:

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

对于更大的应用程序,我会将上次发送时间(和其他信息)存储在定义连接的对象中。 有一个正常的进程查找没有活动的连接,并适当地处理。

您可以将套接字事件包装为可观察对象 ,然后使用.debounce操作符仅在2分钟不活动(未经testing)后触发“请稍后尝试”文本:

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