Узел: дочерний процесс.js: 427 throw new TypeError ("этот тип дескриптора не может быть отправлен");
Я получаю ошибку при использовании процесса.отправить в дочернем процессе, как в:
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
Программы прекрасно работают на одном сервере. Я попытался создать отдельный рабочий сервер, скопировав все файлы, и я начал получать эту ошибку. Конечно, в программах есть гораздо больше, чем в коде, показанном выше. Я чувствую, что пропустил какую-то установку или что-то тривиальное. Я посмотрел на детский процесс.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");
}
Потратил значительное время... Пожалуйста, помогите!!!
1 ответ:
В более старой версии Node (0.10 и, возможно, 0.12),
process.send()
был синхронным, поэтому он не принимал функцию обратного вызова. Однако он принял необязательный второй аргумент,sendHandle
.В вашем случае, когда вы использовали более старую версию узла, ошибка была вызвана тем, что ваш аргумент функции обратного вызова не был допустимым аргументом для
.send()
, и поэтому он провалился через все тестыhandle instanceof ...
, которые вы показали в своем вопросе.