Node.js的方法是事件驅動的,我想知道你將如何解決何時發生事件的問題?如何開發node.js運行時策略?
比方說,我們有一個Web應用程序的一些操作:創建一些數據,服務頁面,
你會如何鋪陳這些事件的接收數據等?在一個螺紋系統中,設計相當「簡單」。您將線程專用於特定的一組任務,並沿着線程同步的方向前進。儘管這些任務處於低需求狀態,但線程卻處於空閒狀態,什麼也不做。當他們需要時,他們運行他們的代碼。雖然這條道路存在問題,但它有很好的文件記錄和解決方法。
我發現很難繞過node.js事件處理方式。 我有10個請求進來,但我沒有創建任何數據,所以我不能任何服務,創建數據是一個長期的行動,另外5個客戶端想發送數據。現在怎麼辦?
UPDATE: 在試圖環繞這個問題我已經創建了下面的代碼我的頭,這是未經測試卻又如此裸露與我在這裏。該代碼基本上是一堆回調,它們被註冊並且應該被執行。將會有某種樁管理器可以運行並決定現在要執行的代碼。該回調創建的所有回調都可以「自然」添加到偶數循環中。它也應該註冊它自己,所以事件循環可以將控制權交還給它。其他內容如靜態內容和可以以不同方式綁定的內容。
- 如何在當前事件循環狀態下注冊回調爲最後一個回調?
- 這是解決此問題的好方法嗎?
正確答案:
選擇的答案是最正確的,只有一個小的代碼變化,那就是:
變化從這個這個功能:
getDetail : function (id, callback) {
var data = makeMyData(id);
callback(data)
}
至:
getDetail : function (id, callback) {
var data = makeMyData(id);
setTimeout(callback,0,data);
}
因此,因爲您註冊了一個回調函數,並且不從函數返回值,所以實際上讓事件循環處理它?不回調(數據)現場計算? – qballer 2012-08-09 14:15:03
你是正確的回調(數據)會被當場調用,這是我害怕的一個壞例子。如果您正在執行冗長的I/O操作,則最好使用事件發射器。一旦I/O或數據生成操作完成,它就會發出一個完整的事件,其中可以包含填充數據的回調。 有關事件發射器的更多信息,請參閱[鏈接](http://nodejs.org/api/events.html) – 2012-08-09 15:10:41
您可以隨時重構您的答案。 – qballer 2012-08-09 15:18:26