我想创建一个服务器,当发出 GET 请求时,日期和时间将显示在服务器控制台中。并在一定的时间间隔后,完成服务器响应并将时间返回给客户端。
我这样做。
const http = require('http');
const port = 3000;
const getDateToUTC = () => (new Date).toUTCString();
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
const interval = setInterval(() => console.log(getDateToUTC()), 1000);
setTimeout(() => {
clearInterval(interval);
res.end(getDateToUTC());
}, 5000)
}
});
server.listen(port, () => {
console.log(`Server running on port: ${port}`);
});
但!对于服务器的多次调用,该函数仅在所有先前的响应都已给出时才起作用。
那些。我在浏览器中打开两个选项卡并转到localhost:3000. 我尝试快速移动,好吧,请求之间可能会有 500 毫秒的差异。此外,我还希望以相同的时间间隔从服务器接收答案。
实际上,第二个请求只有在第一个请求完成后才开始处理,即 在本例中 5 秒后。
如何使请求异步工作?

有趣的。在 Firefox 中一切正常。在 Chrome 中,在收到对第一个请求的响应之前,不会在第二个选项卡上发送请求。
从日志来看,这不是 node.js 的问题,而是浏览器的问题。
这已在 en SO 上讨论过:
Chrome 会锁定缓存并等待对第一个请求的响应。为了解决这个问题,您需要使请求独一无二。例如,您可以打开http://localhost:3000/?id=2和http://localhost:3000/?id=1 ,而不是打开两次http ://localhost:3000
如果您打算从控制台/以编程方式发送这些请求,那么您可以添加到请求标头
Cache-Control: no-cache, no-transform中,这也应该有所帮助。