我想知道JavaScript中是否存在以下问题的可能实现:
我想开发一个Web应用程序来监视多个传入连接的不活动状态。 10个或更多客户端将连接到Web应用程序(通过WebSockets),导致2分钟超时计时器启动。如果客户没有与上述内部的应用程序联系,它将标记为"不活动"。
在更传统的"语言我会用几个线程(每个客户端一个)解决上述情况,这会启动并触发超时定时器。
但据我所知,JavaScript是单线程的,所以我不知道从哪里开始..
答案 0 :(得分:0)
为您的连接创建一个数组,例如:
var connections = [{id: 1, lastActive: ...,}, ...];
然后,使用setTimeout
函数定期检查这些:
var interval = 10000; // 10 seconds in milliseconds
var expireTime = 1000 * 60 * 2 // 2 minutes in milliseconds
setTimeout(function() {
now = new Date()
for(i = 0; i < connections.length; ++i) {
if(now - connections[i]['lastActive'] > expireTime) {
// Do something to make this connection inactive.
}
}
}, interval);
答案 1 :(得分:0)
JavaScript是在客户端运行的,因此每个用户都将在本地运行JS。
编辑: Jason在评论中指出我错过了你在文章中添加的Node.js标签;因此,对于Node.js,上述陈述不正确。
我理解你的问题是&#34;如何用JS编写2分钟的空闲支票?&#34;。就个人而言,我的JS代码中包含一个全局信息,用于跟踪用户上次执行操作的时间。在每个JS函数结束时,将此变量设置为当前时间(More Info Here.)。接下来,使用JS间隔定期检查该值(More Info Here.)。
你最终会得到这样的东西:
var myTime = new Date().getTime();
var timeout = 2 * 60 * 1000;
var interval = 30 * 1000;
window.setInterval(checkTimeout(),interval);
function checkTimeout() {
var t = new Date().getTime();
t = t-myTime;
if (t >= timeout) {
alert("You've been Idle for 5s+");
}
window.setInterval(checkTimeout(),interval);
}
function setTime() {
myTime = new Date().getTime();
}
Here是jsfiddle的一个例子。