2013-04-06 85 views
2

我正在开发一个使用node.js作为平台的appjs的聊天应用程序。当计算机处于空闲状态时(用户离开或不使用它时),我感到困惑。使用node.js os.cpus()检测用户空闲时间?

有os模块中的node.js及其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迭代的方式非常混乱。我在寻找的是知道用户何时不移动鼠标或输入任何应用程序(不仅仅是在我的应用程序中),并且在某些不活动的阈值超时(例如60秒)之后,我需要将他的状态更改为“离开”当他回来时将它改回“在线”。你能指点我一些alghorithm如何做到这一点,甚至为我删除一些代码示例? 在此先感谢。

编辑。 据我所知,每个操作系统都有API来检测用户是否处于空闲状态,例如Adobe Air作为平台有能力轻松实现,我知道我可以使用node-ffi甚至编写一个模块。此外,据我所知,铬也有这种能力out of the box

+1

帮助我们帮助您,为什么nodejs应用程序会在整个计算机空闲时关心?最后的结局是什么?可能有更好的方法去做你所忽视的事情,因为你已经习惯了这种特殊的方法。 – jcolebrand 2013-04-08 18:33:48

+0

我想简单地确定聊天应用程序用户何时离开计算机,甚至没有浏览网页或在MS Word中输入内容,以便我可以将他的状态设置为“离开”,以及何时他将状态恢复为“在线”。 .. – moogeek 2013-04-09 20:19:35

+1

作为一个网络应用程序,如果我只是不经常使用该应用程序,我希望它将我的状态设置为离开。就像StackExchange聊天工作方式一样,当我从15分钟的聊天中消失时,我在标签本身显示为“离开”。 – jcolebrand 2013-04-09 22:02:42

回答

2

根据os.cpus()documentation

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

所以times字段显示花在CPU核心的所有的时间和如何自启动以来,它被用来。但这不是你要找的东西,因为输出详细说明了系统的CPU使用情况,特别是不适用于appjs窗口。

现在如何找出您的appjs应用程序是否处于活动/闲置状态。你应该检查appjs page。有一些事件,如mousemove和​​,您可以在您的应用程序中使用它。

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

对不起,如果我没有彻底解释。由于用户空闲,我意味着全局用户不活动,不仅适用于appjs窗口,所以javascript鼠标和键盘事件不适合这种情况。 – moogeek 2013-04-06 18:09:32

+1

CPU空闲时间是一个很好的衡量标准。如果CPU闲置了很长时间,这意味着用户没有认真做事,或者根本没有使用系统。 – 2013-04-07 05:11:05

+2

@MortezaM。不,这不是真的,因为可能会出现CPU闲置但用户正在使用计算机的情况。认为“阅读PD​​F”。 – jcolebrand 2013-04-08 18:32:58