发送2个http并发请求



我需要测试一个应用程序的web-api。测试用例是,如果2个类似的请求同时来到web应用程序的2个节点,它返回错误。所以我需要在一个web应用程序的两个单独的节点上发送2个请求。我知道如何发送1个请求以及如何在旋转中发送请求。下面是我请求的例子:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
var url = "url";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log(json.result);
}
};
var data = JSON.stringify();
xhr.send(data);

首先,这主要是我的意见,我会使用获取API调用你想要拉到你的web应用程序的资源。

我认为它需要比XMLHttpRequest更少的样板文件。

另一方面,如果你想检查你的web应用程序是否向同一资源发出两个请求,或者如果你想知道如何知道和处理后端获得克隆请求的情况,我不清楚。

在第一种情况下,您可以使用类似RxJs的东西来避免在得到响应之前发出请求。但是对于你的项目来说,它可能是一个非常大的依赖项。

另一种方法是在得到响应之前禁用用户输入(如发出请求的按钮)。

但是,如果你的问题是关于如何知道在你的后端应用程序,当你有一个重复的请求来自同一客户端,这将取决于你的后端架构。比如,如果你有一个负载均衡器和许多后端服务,或者如果你只有一个面向公共互联网的nodejs后端,等等。

我建议你以某种方式持久化一些客户端数据(内存,数据库或其他东西),如IP,或会话id,或一些有用的东西来知道谁在做API调用;然后检查是否已经有对同一资源的正在进行的请求,以便您可以做出相关的响应。调用完成后,可以将其从持久化层中删除。

也许你期待一些代码片段,但我希望这能对你有用。

在注释后编辑:

我有host1。webapp/api/methodX和host2.webapp/api/methodX。简单的我必须同时发送2个请求(1个用于host1, 1个用于host2)。我不需要等待host1的响应,然后再发送请求到Host2,我需要把它们一起发送到不同的主机。和我不要关心响应时间/请求处理时间/等等

如果我使用了curl,它就会变成这样:request2

在这种情况下,它取决于您想要测试的行为。您不能使用同一个XMLHttpRequest对象进行两个AJAX调用。如果我是你,我会发出两个请求,也许把它们包装在一个承诺中,然后使用promise . allsettle()方法。然后检查返回值发生了什么。另一种(但更复杂的方式)应该是有一个service worker来拦截所有的http流量,在那里你可以看到API调用是否按照你想要的方式进行。

最新更新