我刚开始使用咖啡脚本,我喜欢它,但我遇到了一个令人沮丧的问题。当我在 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' }
然而,当我在咖啡脚本中重现该示例时,我只让父进程接收到来自子进程的消息;显然,子进程没有收到来自父进程的消息。
------------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 代码基本相同,只是包装在一个调用 this 的函数中。问题必须是范围之一,但我看不出如何解决它。毫无疑问,这对大师们来说是微不足道的,而且我已经束手无策了,所以我想我会问一下,以防有人好心给我指路。
达林·里德博士。