我在父进程中有这个:
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');
}
});
正在被调用。但我在浏览器中看到了这个错误:
任何人都知道如何使用普通的套接字发送有效的响应吗?
我想我需要学习如何实际编写有效的HTTP响应,之前从未尝试过。
答案 0 :(得分:1)
执行此操作时:
socket.end('foobar!!!');
您只是发送foobar!!!
并且这不是有效的http响应,这正是您的客户端错误消息告诉您的。
因为您已将此套接字传递给另一个进程并且express尚未在原始进程中向该套接字写入任何内容,所以您需要在此处发送完整的有效http响应。
http响应如下所示:
归功于this article 对于图像。
因此,一个非常简单的http响应可能如下所示:
socket.end('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nHello');