【发布时间】:2013-03-28 23:17:33
【问题描述】:
我正在开发一个使用 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。
【问题讨论】:
-
为了帮助我们帮助您,为什么 nodejs 应用程序会关心整个计算机是否空闲?结局是什么?可能有更好的方法来做你正在尝试的事情,而你却忽略了,因为你已经在这种特殊的方法上陷入了困境。
-
作为一个网络应用程序,如果我不经常使用该应用程序,我希望它将我的状态设置为离开。就像 StackExchange 聊天的工作方式一样,当我离开聊天 15 分钟后,我在标签本身中显示为“离开”。
-
所以你打算针对一个高度选择的群体在本地运行 nodejs,还是 appjs 打包并独立运行各种版本的 node?诚然,我没有研究过 appjs,因为我不认为这是一个功能强大的桌面运行时,但又不是 Java ;-) 说真的,我的意思是,如果你打算将它作为桌面客户端运行那么是的,像
top一样监控CPU 的低使用率。但是您必须为该值保留一个阈值,例如 4% 或其他值。遗憾的是,您不能为活动挂钩鼠标/kbd 驱动程序堆栈...... -
请记住,Outlook 可能会在后台启动并使用 CPU,或者屏幕保护程序可能会使用 CPU,或者网络文件副本等。
-
这可能有助于确定阈值:stackoverflow.com/questions/15929790/…