我正在开发一个使用node.js作为平台的appjs的聊天应用程序。我一直在检测计算机何时处于空闲状态(当用户远离它或不使用它时)。
node.js中有os模块,其os.cpus()
为每个核心提供了这样的信息:
[ { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 252020,
nice: 0,
sys: 30340,
idle: 1070356870,
irq: 0 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 306960,
nice: 0,
sys: 26980,
idle: 1071569080,
irq: 0 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 248450,
nice: 0,
sys: 21750,
idle: 1070919370,
irq: 0 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 256880,
nice: 0,
sys: 19430,
idle: 1070905480,
irq: 20 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 511580,
nice: 20,
sys: 40900,
idle: 1070842510,
irq: 0 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 291660,
nice: 0,
sys: 34360,
idle: 1070888000,
irq: 10 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 308260,
nice: 0,
sys: 55410,
idle: 1071129970,
irq: 880 } },
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times:
{ user: 266450,
nice: 1480,
sys: 34920,
idle: 1072572010,
irq: 30 } }
]
那么它适合检测用户空闲吗?据我所知,我可以使用两个值:user
和idle
。 idle
值迭代非常快,但user
值以混乱的方式迭代。我正在寻找的是知道用户何时不移动鼠标或在任何应用程序中键入(不仅在我的应用程序中),并且在一些阈值超时(例如60秒)不活动后我需要将其状态更改为“离开”当他回来的时候将它改回'在线'。你能指点我一些算法怎么做,甚至为我下一些代码示例?
提前谢谢。
修改 据我所知,每个操作系统都有API来检测用户是否空闲,例如Adobe Air作为平台有能力轻松完成,我知道我可以使用node-ffi甚至编写模块。此外,据我所知,Chromium也有这种能力out of the box。
答案 0 :(得分:2)
根据os.cpus()documentation:
返回包含有关每个CPU /核心的信息的对象数组 安装:模型,速度(以MHz为单位)和时间(包含该对象的对象) CPU /核心所花费的毫秒数:user,nice,sys,idle, 和irq)。
因此times
字段显示了在cpu核心上花费的所有时间以及自启动以来它是如何使用的。但这不是你想要的,因为输出详细说明了系统的CPU使用情况,特别是appjs窗口。
现在如何找出你的appjs应用程序是活动/空闲的。你应该检查appjs page。您可以在应用程序中使用mousemove
和keydown
等一些事件。
window.addEventListener('keydown', function(e){
//if last trigger is there remove it and add new trigger
//else call makeactive()
});
window.addEventListener('mousemove', function(e){
//if last trigger is there remove it and add new trigger
//else call makeactive()
});
//To trigger timeout activity do something like this
setTimeout(function () {
//change icons, set status as away.
}, 60000); // after 60 seconds timeout
//To reset inactivity changes if it is already idle
makeactive(){
//reset icons, set status as active.
}