如何检测事件不会从最后两分钟触发
我正在为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 */ });