コーヒースクリプトを使い始めたばかりで気に入っていますが、イライラする問題に遭遇しました。プロセスとフォークされた子プロセスの間でメッセージを送受信する基本バージョンを JavaScript で再現すると、期待どおりの結果が得られます。これまでのところ、すべて順調です。
----------- app2.js -----------------------------
var child = require('child_process');
var forked = child.fork("./child2.js");
forked.on('message', function (msg) {
console.log("parent recieved ", msg);
});
forked.send({hello:'world'});
---------- child2.js --------------------------------
process.on('message', function(m) {
console.log("child received ", m);
});
process.send({foo:'bar'});
-------------- ノード app2.js の出力 -----
child received { hello: 'world' }
parent recieved { foo: 'bar' }
しかし、この例を coffeescript で再現すると、子プロセスからメッセージを受け取る親しか得られません。明らかに、子プロセスは親プロセスからメッセージを受け取りません。
-----------app.coffee --------------------------------
cp = require('child_process')
n = cp.fork("./child.coffee")
n.on 'message', (m) =>
console.log 'PARENT recieved', m
n.send {foo:'hello from the parent process'}
---------- child.coffee ---------------------------
process.on 'message', (m) =>
console.log 'CHILD received ', m
console.log "Child process running"
process.send {bar:'hello from the child process'}
-------------------- コーヒー app.coffee の出力 ----
Child process running
PARENT recieved { bar: 'hello from the child process' }
コンパイルされた JavaScript を見ると、(予想どおり) coffeescript をコンパイルした結果は元の JavaScript コードと本質的に同じであり、これを呼び出して関数にラップされていることがわかります。問題はスコープの 1 つでなければなりませんが、解決方法がわかりません。教祖にとっては些細なことであることは間違いないし、私はもう限界に来ているので、道を教えてくれる親切な人がいるなら聞いてみようと思った.
ダリン・リード博士.