Javascript 为同一请求发送两个响应
在Node.js中,假设服务请求需要时间。因此,在收到请求后,服务器希望回复“我恢复了您的请求,我会很快回复您”。然后,一旦请求的处理结束,服务器希望,这一次,返回给客户机实际的响应。我们怎么能做到呢? 下面的代码段出现错误(连接关闭或其他)Javascript 为同一请求发送两个响应,javascript,node.js,Javascript,Node.js,在Node.js中,假设服务请求需要时间。因此,在收到请求后,服务器希望回复“我恢复了您的请求,我会很快回复您”。然后,一旦请求的处理结束,服务器希望,这一次,返回给客户机实际的响应。我们怎么能做到呢? 下面的代码段出现错误(连接关闭或其他) 不能对同一请求发送两个响应。每个请求只能发送一个完整格式的响应。这就是http规范 据我所知,针对您的问题,唯一的解决办法是: 在刷新流模式下使用http。在这里,您发送部分响应,刷新它,这样您就知道它被发送了,并且您在另一端有一种特殊类型的客户端,它正在
不能对同一请求发送两个响应。每个请求只能发送一个完整格式的响应。这就是http规范 据我所知,针对您的问题,唯一的解决办法是:
您正在寻找服务器发送的事件(SSE),当然您可以发送分块数据,只是在发送最后一段数据之前不要调用
res.end()
。顺便说一下,您只能发送一次标题。请参见此示例:
res.writeHead(200);
res.write("The first piece of data");
setTimeout(()=>{
res.write("This piece of data will be sent in 1 second.");
res.end("Ok, all data has be send, now close the connection.");
}, 1000);
你不能,结束。使用HTTProtocol,每个请求只能得到一个响应,因此,如果响应为“尚未”,则只需安排更多的请求,或者设置一个直接套接字连接,以便客户端和服务器可以使用推送通知协议而不是标准的HTTP进行通信。@Mike'Pomax'Kamermans请详细说明。没有什么需要详细说明的:“否:HTTP不允许您发送多个响应。一个请求在收到一个响应时被视为已处理”。如果你想做更多的事情,你必须设计一个RESTful架构,或者你需要使用一个不同的协议,允许像WebSocket这样的任意通信。更不用说你可以在客户端使用异步性让客户端做其他事情(比如显示微调器)当它等待请求完成时。服务器也可以是异步的,因此,如果完成响应的构建很慢,那么在等待以前的响应完成时处理其他请求。Socket.io将是解决此问题的好方法
res.writeHead(200);
res.write("The first piece of data");
setTimeout(()=>{
res.write("This piece of data will be sent in 1 second.");
res.end("Ok, all data has be send, now close the connection.");
}, 1000);