запись дочернего процесса в сокет - localhost отправил неверный ответ - PullRequest
0 голосов
/ 10 мая 2018

У меня есть это в родительском процессе:

import cp = require('child_process');
const k = cp.fork(file);

 app.use(function(req,res,next){       
      k.send('handle', req.socket);       
 };

и затем у меня есть это в дочернем процессе:

process.on('message', function (m, socket) {

  if (m === 'handle' && socket) {
    socket.end('foobar!!!');
  }
  else{
    console.log('nope');
  }

});

После некоторой регистрации я знаю, что socket.end('foobar!!!'); вызывается. Но я вижу эту ошибку в браузере:

enter image description here

Кто-нибудь знает, как я могу отправить действительный ответ с помощью простой розетки в моем распоряжении?

Полагаю, мне нужно научиться писать правильный HTTP-ответ, никогда раньше не пробовал.

1 Ответ

0 голосов
/ 10 мая 2018

Когда вы делаете это:

socket.end('foobar!!!');

Вы просто отправляете foobar!!!, и это неверный http-ответ, который точно соответствует сообщению об ошибке вашего клиента.

Поскольку вы передали этот сокет другому процессу, а Express еще ничего не записал в этот сокет в исходном процессе, вам необходимо отправить полный действительный http-ответ здесь.

HTTP-ответ выглядит так:

enter image description here

Кредит этой статье для изображения.

Итак, очень простой http-ответ может выглядеть так:

socket.end('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nHello');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...