callbacks-manager(nodejs)

最近在看expresstemplate如何使用,其中使用到viewpartial,會需要傳入callback參數,如果一次需要繪製多個template,最後在傳給browser,必須要有一個監聽所有callback被呼叫的機制,所以就寫了一個簡單的plugin

安裝callback manager module

npm install callbacks-manager

example:

var callbackManager = require("callback-manager").create();
callbackManager.create("success");
setTimeout(callbackManager.getReceiver("success"),100);
setTimeout(callbackManager.getReceiver("success"),500);
callbackManager.done( "success", function(){ console.log("success"); });

這一段code主要是將create一個manager出來,將callback統一透過getReceiver回傳的介面做處理,最後callback都被呼叫後,在由done去處理。(參數可以省略->"success")

github

node.js multi-process

node.js本身並不支援multi-process,但是有其他方式可以達成。簡單來說,就是利用node.js的不會阻塞IO的特性,然後去執行終端機(terminal)的command line,然建立監聽事件,就可以達成multi-process。以有人實作出來,使用方法如同browserWorker,可以參考node.js的Worker

以下是一個簡單實作原理的範例:

main.js

var spawn = require('child_process').spawn,
    child_process = spawn('node', ['child.js']);

    child_process.stdout.on('data', function (data) {
      console.log('stdout: ' + data);
    }); 

    setInterval(function(){
      child_process.stdin.write("test");
    },199);

child.js

//當程式執行完畢,不關閉此程序
process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function (chunk) {
    console.log('data: ' + chunk);
});

如果想要理解更多,請參考processchild_process的相關event,或者其他人實作的source code