2013-04-06 84 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