當我在服務器端收到一個「on」事件時,我想並行地啓動一個任務,所以它不會阻塞當前的事件循環線程。是否有可能這樣做?怎麼樣?如何使用socket.io和node.js執行異步任務?
我不想阻止服務器端循環,我希望能夠發回信息給客戶端,一旦任務完成,一些諸如:
client.on('execute-parallel-task', function(msg) {
setTimeout(function() {
// do something that takes a while
client.emit('finished-that-task');
},0);
// this block should return asap, not waiting for the previous call
});
我不知道如果setTimeout將完成這項工作。
我可以使用async.parallel沒有問題,但服務器將回答其他請求,而我的(做一些需要一段時間)正在運行?它會同時運行兩個代碼嗎? –
是的,這就是異步的工作方式......它基本上是一個線程(你在node.js中沒有線程)......每當有一部分正在等待發生的事情時,其他代碼就會運行,並且當發生事件時會調用一個事件正確的處理程序處理它.. http://stevehanov.ca/blog/index.php?id=12 –
如果你需要線程模型,你可能已經選擇了worng技術爲你的後端...有多個進程之間進行溝通不像線程那樣高效..事實上,你會創建使用進程的線程==更高的開銷,更多的複雜性,沒有支付.. –