Node.js EventEmitter
2015年1月14日 - 未分類
Node.jsを使ってsendcomを動かして、ブラウザに表示させるまでの方法を書きます。
先ず、sendcomは、デバイスにアクセスするので、sudoしなければ動作しません。しかし、sudoするには、一々、パスワードを入力しなければならないので、プログラムから動かすには面倒です。そこで、パスワードなしで、sudoできるようにしておきます。/etc/sudoresに、
としておくと、ユーザーcoderは、sudo時にパスワードを聞かれなくなります。
Node.jsで、子プロセスからsendcomを呼び出します。
var spawn = require(‘child_process’).spawn;
var scanproc = spawn( sudoscripts + ‘/sendcom’,[‘-e ‘+com]);
stdoutに出力があった時にイベントが発生します。
scanproc.stdout.on(‘data’, function (data) {
var temp=data.split(“\n”);
});
sendcomは何度も呼び出されます。Node.jsは、非同期処理なので、いつ、sendcomの処理が終わったか分からないので、分かるようにします。
function command( com ) {
var ev = new EventEmitter;
var spawn = require(‘child_process’).spawn;
var scanproc = spawn( sudoscripts + ‘/sendcom’,[‘-e ‘+com]);
scanproc.stdout.on(‘data’, function (data) {
var ev = new EventEmitter;
var temp=data.split(“\n”);
ev.emit(‘done’, temp[1]);
});
return ev;
};
なるほど、エミッターを導入するのですね。このエミッターのイベントは、
req.on(‘done’,function(arg1) { }
); }
で捕まえることができます。非同期処理なので、でてくる順序はバラバラです。この順序入れ替えは、クライアント側でするのでしょうね。
sendcomをブラウザで使う目処が立ってきました。