节点:child_process.js:427 throw new TypeError("This handle type can't be sent");
Node: child_process.js:427 throw new TypeError("This handle type can't be sent");
在子进程中使用 process.send 时出现错误,如:
process.send(someObject, function() {
....
});
子进程创建如下:
var child = require('child_process');
var forkedProcess = child.fork(nodeScriptFile);
错误是:
child_process.js:427
throw new TypeError("This handle type can't be sent");
^
TypeError: This handle type can't be sent
这些程序在一台服务器上运行良好。我试图通过复制所有文件来创建一个单独的生产服务器,但我开始收到此错误。当然,程序还有很多,然后是上面显示的代码。
我觉得我忽略了一些安装或一些微不足道的事情。我查看了 child-process.js 代码,错误是由此代码触发的:
if (handle instanceof net.Socket) {
message.type = 'net.Socket';
} else if (handle instanceof net.Server) {
message.type = 'net.Server';
} else if (handle instanceof process.binding('tcp_wrap').TCP ||
handle instanceof process.binding('pipe_wrap').Pipe) {
message.type = 'net.Native';
} else if (handle instanceof dgram.Socket) {
message.type = 'dgram.Socket';
} else if (handle instanceof process.binding('udp_wrap').UDP) {
message.type = 'dgram.Native';
} else {
throw new TypeError("This handle type can't be sent");
}
花了很多时间...请帮忙!!!
在旧版本的 Node(0.10,也许还有 0.12)中,process.send()
是同步的,所以它不接受回调函数。但是,它确实接受了可选的第二个参数,sendHandle
.
在您的情况下,您使用的是较旧的 Node 版本,抛出错误是因为您的回调函数参数不是 .send()
的有效参数,因此它在所有 handle instanceof ...
你在问题中展示的测试。
在子进程中使用 process.send 时出现错误,如:
process.send(someObject, function() {
....
});
子进程创建如下:
var child = require('child_process');
var forkedProcess = child.fork(nodeScriptFile);
错误是:
child_process.js:427
throw new TypeError("This handle type can't be sent");
^
TypeError: This handle type can't be sent
这些程序在一台服务器上运行良好。我试图通过复制所有文件来创建一个单独的生产服务器,但我开始收到此错误。当然,程序还有很多,然后是上面显示的代码。 我觉得我忽略了一些安装或一些微不足道的事情。我查看了 child-process.js 代码,错误是由此代码触发的:
if (handle instanceof net.Socket) {
message.type = 'net.Socket';
} else if (handle instanceof net.Server) {
message.type = 'net.Server';
} else if (handle instanceof process.binding('tcp_wrap').TCP ||
handle instanceof process.binding('pipe_wrap').Pipe) {
message.type = 'net.Native';
} else if (handle instanceof dgram.Socket) {
message.type = 'dgram.Socket';
} else if (handle instanceof process.binding('udp_wrap').UDP) {
message.type = 'dgram.Native';
} else {
throw new TypeError("This handle type can't be sent");
}
花了很多时间...请帮忙!!!
在旧版本的 Node(0.10,也许还有 0.12)中,process.send()
是同步的,所以它不接受回调函数。但是,它确实接受了可选的第二个参数,sendHandle
.
在您的情况下,您使用的是较旧的 Node 版本,抛出错误是因为您的回调函数参数不是 .send()
的有效参数,因此它在所有 handle instanceof ...
你在问题中展示的测试。