子进程写入套接字 - localhost发送了无效的响应

时间:2018-05-09 22:21:36

标签: node.js sockets http express tcp

我在父进程中有这个:

return this.userService.login({username: username, password: password})
  .pipe(
    map(res => res.token),
    mergeMap(token => this.localStorage.setItem(AUTH_TOKEN_KEY, token)),
    tap(res => console.log(res)) // boolean true
  );

然后我在子进程中有这个:

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'); } }); 正在被调用。但我在浏览器中看到了这个错误:

enter image description here

任何人都知道如何使用普通的套接字发送有效的响应吗?

我想我需要学习如何实际编写有效的HTTP响应,之前从未尝试过。

1 个答案:

答案 0 :(得分:1)

执行此操作时:

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

您只是发送foobar!!!并且这不是有效的http响应,这正是您的客户端错误消息告诉您的。

因为您已将此套接字传递给另一个进程并且express尚未在原始进程中向该套接字写入任何内容,所以您需要在此处发送完整的有效http响应。

http响应如下所示:

enter image description here

归功于this article  对于图像。

因此,一个非常简单的http响应可能如下所示:

socket.end('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nHello');