总结
正如其标题,Guzzle 允许一次发送多个请求以节省时间,如文档中所示。
$responses = $client->send(array(
$requestObj1,
$requestObj2,
...
));
(given that each request object is an instance of
Guzzle\Http\Message\EntityEnclosingRequestInterface)
当响应返回时,为了识别哪个响应是针对哪个请求的,我们可以遍历每个请求并获取响应(仅在执行上述命令后可用):
$response1 = $requestObj1->getResponse();
$response2 = $requestObj2->getResponse();
...
B. 问题
如果请求对象包含相同的数据。无法识别原始请求。
假设我们有以下场景,我们需要创建 2 篇文章:远程服务器上的 A 和 B:something.com/articles/create.json
每个请求都有相同的 POST 数据:
subject: This is a test article
创建后,带有 2 个位置的 Guzzle 响应返回:
something.com/articles/223.json
something.com/articles/245.json
使用上面的方法将response-to-its-request链接起来,我们仍然不知道哪个response是针对哪篇文章的,因为request对象是完全一样的。
因此,在我的数据库中,我无法写下结果:
article A -> Location: 245.json
article B -> Location: 223.json
因为它可以是相反的方式:
article A -> Location: 223.json
article B -> Location: 245.json
一种解决方案是在 POST 请求中添加一些额外的参数,例如
subject: This is a test article
record: A
但是,远程服务器将返回错误并且不会创建文章,因为它不了解关键“记录”。远程服务器是第三方服务器,我无法更改它的工作方式。
另一个适当的解决方案是在请求对象上设置一些特定的 id/tag,以便我们之后可以识别它。但是,我查看了文档,但没有方法来唯一标识请求,例如
$request->setID("id1")
or
$request->setTag("id1")
这一直困扰着我几个月,仍然无法解决这个问题。
如果您有解决方案,请告诉我。
非常感谢,你救了我!!!!
感谢您阅读这篇长文。