我在Symfony(2.4。*)中通过Misd GuzzleBundle使用Guzzle 3.8.1。在我的开发和测试环境中(两者都在同一台服务器上都有api端点),我能够成功激活异步发布请求。
在我的生产环境中,我的端点位于同一台服务器上,但是使用apache vhosts通过单独的子域进行访问。我正在使用基本身份验证,目前它是通过http(最终https)。但是,我的异步请求返回了200个状态代码,但是我没有为这些请求获取存储在远程服务器上的POST数据。
$this->client->addSubscriber(new AsyncPlugin());
$request = $this->client->post(
'statements',
array(
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'X-Experience-API-Version' => '1.0.1'
),
json_encode($statement)
)->setAuth($this->authuname,$this->authpass);
$response = $request->send();
但是,如果我删除$this->client->addSubscriber(new AsyncPlugin());
并同步发出相同的帖子请求,那么我的POST数据将存储在远程服务器上。
我正在使用misd guzzle包中的日志记录功能。对于asynch请求日志,我可以在请求中看到json数据,因为它不会等待我得到的响应:
<<<<<<< HTTP/1.1 200 OK X-Guzzle-Async: Did not wait for the response --------
我已经检查了curl并且它已启用并且在开发中设置与在生产中相同。唯一的问题是async不能在生产服务器上运行。我在Windows Server 2008上使用apache 2.4.6。
还有其他人有类似的问题。无论如何都要在某处记录响应,即使这是异步完成的。我在我的虚拟主机中设置了日志记录,但因为它有200个,我没有看到任何东西。
希望有人可以提供建议,如果您需要任何进一步的信息,请告诉我。
亲切的问候, Paul Pounder