【发布时间】:2016-03-25 00:08:34
【问题描述】:
我们正在开发基于 Guzzle 6 的 PHP 客户端,以实现对响应时间敏感的案例。
Guzzle 可以执行 async requests via curl 返回承诺 API。因为可以将主体作为流检索,所以我想知道承诺是否解决(例如,通过 wait() 强制)
a) 何时收到最后一个标头(如on_headers hook)?
b) 尸体何时被完全接收?
我试图在 Guzzle 的资源中找到答案,但我失败了。
【问题讨论】:
我们正在开发基于 Guzzle 6 的 PHP 客户端,以实现对响应时间敏感的案例。
Guzzle 可以执行 async requests via curl 返回承诺 API。因为可以将主体作为流检索,所以我想知道承诺是否解决(例如,通过 wait() 强制)
a) 何时收到最后一个标头(如on_headers hook)?
b) 尸体何时被完全接收?
我试图在 Guzzle 的资源中找到答案,但我失败了。
【问题讨论】:
答案是选项b
如果您使用默认的基于 Curl 的调用,则在 curl 调用完成之前,promise 不会解析。在 CurlHandler 的__invoke:
curl_exec($easy->handle);
...
return CurlFactory::finish($this, $easy, $this->factory);
返回:
return new FulfilledPromise($easy->response);
CurlMultiHandler 也有类似的代码。 on_headers 函数中没有解决承诺,所以大概是在主体完成时。我相信流实际上是基于内存/磁盘的,而不是基于网络的。
如果你仔细想想,这是有道理的;在您知道所有下载的数据都正常之前,您不应该成功地解决承诺。
【讨论】: