使用node.js os.cpus()来检测用户空闲时间?

我正在开发一个使用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 } } ] 

那么它适合检测用户闲置? 据我所知有两个值,我可以使用: useridleidle值非常快地迭代,但是user以混沌的方式迭代。 我正在寻找的是知道什么时候用户不移动鼠标或在任何应用程序(不仅在我的应用程序中)input,并在一些阈值超时(例如60秒)的不活动状态,我需要改变他的状态为'离开'当他回来时,将其改回“在线”。 你能指点我一些alghorithm如何做到这一点,甚至给我一些代码示例? 提前致谢。

编辑。 据我所知,每个操作系统有API来检测用户是空闲的,例如Adobe Air作为平台有能力做到这一点很容易,我知道我可以使用node-ffi甚至写一个模块。 此外,据我所知,Chromium也具备开箱即用的能力。

根据os.cpus() 文档 :

返回一个包含每个安装的CPU /内核信息的对象数组:模型,速度(以MHz为单位)和时间(包含CPU /内核花费的毫秒数的对象:user,nice,sys,idle和irq) 。

所以times字段显示了在cpu核心上花费的所有时间以及自启动以来它是如何使用的。 但是这不是你正在寻找的,因为输出详细的系统的CPU使用情况不是特别针对appjs窗口。

现在如何找出你的appjs应用程序是活动/闲置。 你应该检查appjs 页面 。 有一些事件,如你可以在你的应用程序中使用的mousemovekeydown

  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. }