2014-01-06 97 views
2

使用ExpressJS和Socket.IO我有一個HTML場景,多個用戶可以連接到NodeJS。我即將做一些必須同步到所有客戶端的動畫。在客戶端,我知道動畫可以通過setInterval()(而不是時間理想)然後socket.emit()到NodeJS來實現。但是NodeJS中是否有一個Idle循環可用於主控動畫和io.sockets.emit()來更新每個人的每個人?NodeJS空閒循環在哪裏?

編輯:我想在node.js中做一般的「動畫」值。僞代碼:

process.idle(function() { 

    // ... 
    itempos.x += (itempos.dest - itempos.x)/20; // easing 
    itempos.y += (itempos.dest - itempos.y)/20; // easing 

    io.sockets.broadcast('update', itempos); 
    // ... 
}); 
+1

請說明你想達到的目標。對於動畫,我建議看看'requestAnimationFrame' https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame – thomaux

+0

節點也有setInterval以及.. – AJcodez

+0

@AJcodez我需要一個空閒循環,以便處理數據儘可能快。 – Jake

回答

2

作爲一個服務器端框架很少會閒置(CPU或I/O)。除了idleloop更適合DOM要求。但在node.js中你有以下功能:

  1. process.nextTick:執行回調當前事件隊列中的下一個事件循環的開始即結束之後。它不允許I/O執行,直到maxTickDepthnextTick調用被執行。如果使用得太多,可能會阻止I/O的發生。

  2. setImmediate:當前事件循環中的I/O回調完成後執行回調。允許在多個setImmediate調用之間發生I/O。

給定你想要的setImmediate更適合你的需求。

0

退房的計時器文檔:http://nodejs.org/api/timers.html

所有的定時器功能是全局。

setInterval(callback, delay, [arg], [...])

要安排每延遲毫秒的回調重複執行。返回可能用於clearInterval()的intervalId。您也可以選擇將參數傳遞給回調函數。

對於同步的客戶端動畫,它可能有意義以較慢的速度執行塊中的序列,而不是試圖將許多websocket發射擠入動畫持續時間。根據我的經驗,人眼比websockets慢得多。

有大量的客戶端框架可以爲您提供緩解服務,而不是服務器問題。

(這一切都無視你的使用情況,當然!)

+0

感謝您的回覆。我現在只是在探索NodeJS,所以我不想特別做任何事情。緩和的例子剛剛完成。從目前爲止的評論來看,似乎沒有傳統的空閒循環呢? – Jake

+0

據我所知,空閒循環用於後臺任務。使用事件驅動的體系結構,基本上所有事情都可以在後臺進行。回答不是基於真實用例的問題總是很困難:) – AJcodez