节点: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 ... 你在问题中展示的测试。