我们正在开发一个基于Guzzle 6的PHP客户端,用于响应时间合理的案例。
Guzzle可以执行返回promise API的async requests via curl。因为身体可以作为流检索,我想知道诺言是否解决(例如强制通过wait())
a)何时收到最后一个标题(如on_headers hook)?
b)身体何时被完全接收?我试图在Guzzle的消息来源中找到答案,但我失败了。
答案 0 :(得分:0)
答案是选项b
如果您使用默认的基于Curl的呼叫,则承诺不会解决,直到完成curl呼叫。在CurlHandler的__invoke
中:
curl_exec($easy->handle);
...
return CurlFactory::finish($this, $easy, $this->factory);
返回:
return new FulfilledPromise($easy->response);
CurlMultiHandler存在类似的代码。承诺在on_headers
函数中没有得到解决,所以可能是在身体完成时。我相信这些流实际上是基于内存/磁盘的,而不是基于网络的。
如果你仔细想想,这是有道理的;在知道所有下载的数据之前,你不应该成功解决一个承诺。