【问题标题】:is it possible to make more than one HTTP request at the exact same time in Node.js?是否可以在 Node.js 中同时发出多个 HTTP 请求?
【发布时间】:2019-10-18 21:10:55
【问题描述】:

我想在完全相同的微时间发送两个或多个 HTTP 请求,我知道这是不可能的,可能是因为 Nodejs 是一种单线程语言并且有一个队列。

我创建了事件发射器并添加了 5 个侦听器,一旦我发射了一些东西 它发送 HTTP 请求。

const events = require('events');
const eventEmitter = new events.EventEmitter();

const callback = ()=>{
    console.log(new Date().getTime());
    fetch('https://jsonplaceholder.typicode.com/todos/1')
        .then(response => response.json())
        .then(json => console.log(json));
};
eventEmitter.on('message',callback);

// second request
eventEmitter.on('message',callback);

// third request
eventEmitter.on('message',callback);

// forth request
eventEmitter.on('message',callback);

// fifth request
eventEmitter.on('message',callback);

eventEmitter.emit('message');


这是输出

1559556527258
1559556527276
1559556527277
1559556527278
1559556527280
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false }
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false }
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false }
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false }
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false }


我预计请求会在完全相同的时间运行。有没有其他方法可以同时发送这些请求?

【问题讨论】:

  • 也许你能解释一下你到底想达到什么目标。无论如何,对同一主机的请求将由您的操作系统网络堆栈和 NIC 驱动程序进行序列化。
  • @MaximEgorushkin 我只是想测试“MySQL”事务是否正常工作,一些用户同时向我的应用程序发送请求,所以他们使用相同的,例如优惠券代码两次。
  • 由于 TCP/IP 的工作方式,没有同时接收请求这样的事情 - 必须有一个数据包首先到达,另一个数据包随后到达。像 PHP 和 Java 这样的多线程/多处理语言往往会发生 sequential 请求意外地被并行(同时)处理,因为第二个请求在第一个请求完成之前创建了一个线程/进程。

标签: node.js asynchronous parallel-processing fetch


【解决方案1】:

我只是想测试“MySQL”事务是否正常工作,一些用户同时向我的应用发送请求,所以他们使用相同的,例如优惠券代码两次。

可能更简单的第一步是编写一个小型单元测试来测试您的业务逻辑事务,而无需执行 HTTP 消息传递部分。

【讨论】:

  • 感谢您的回答,无论http请求如何,如何同时测试某些功能两次?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2018-06-17
  • 2017-01-02
  • 1970-01-01
相关资源
最近更新 更多