【发布时间】:2018-02-06 00:45:02
【问题描述】:
我正在尝试编写一个 Node.js 应用程序,它接受来自客户端的传入请求,然后调用远程服务器上的某些 Web 服务以检索数据。
const express = require('express')
const request = require('request')
const moment = require('moment')
const app = express()
app.get('/', (req, res) => {
request('http://localhost/sleep.php', (error, response, body) => {
res.send('get data at ' + moment().format())
})
})
app.listen(3000)
远程服务是用PHP编写的:
<?php
sleep(10);
echo 'Return something!';
问题是,如果有新请求进来,那么 Node.js 会被阻塞,直到它完成最后一个回调。如何解决这个问题?有什么想法吗?
更新:
我实际上通过 Firefox 同时发出了两个请求,第二个请求花费了将近 20 秒。
【问题讨论】:
-
谷歌搜索“nodejs async await”产生了这个结果:blog.risingstack.com/mastering-async-await-in-nodejs
-
@AlexanderTaran 我看不出这与 async/await 有什么关系...
-
我没有看到在这个例子中节点是如何被阻止的,你没有做同步请求。每个请求大约需要 10 秒,但您现在可以处理多个并发请求,除非您没有显示完整的代码。
-
更重要的是:这绝对不是 PHP 问题,也很可能不是 Node.js 问题。这是浏览器和 HTTP 的问题。