在我的应用程序中,我运行了两个laravel 5.2服务器,他们需要相互交互才能使用guzzle来获取资源。
在我的服务器1中,我使用League Transformer返回一些数据,但数据需要包含来自我的服务器2的资源 我在转换函数中使用guzzle获取数据:
public function transform(MyModel $model) {
$client = new Client();
$result = $client->request('GET', 'localhost:8000/api/companies/'.$model->company_id);
$company= $result->getBody()->getContents();
$data = [
'id' => (int) $model->id,
'name' => $model->name,
'status' => $model->status,
];
$data['company'] = json_decode($company);
return $data;
}
当我向localhost:4040/api/models/1
请求获取此资源时
我收到了这个回复:
"data": {
"id": 1,
"name": "John Doe",
"status": "active",
"company": {
"data": {
"id": 1,
"name": "My Company",
}
}
我遇到的问题是当我需要使用guzzle从服务器2访问MyModel(存储在服务器1中)时,因为我需要向服务器1发出请求:
$result = $client->request('GET', 'localhost:4040/api/models/'.$model->_id);
并且服务器1需要向服务器2(在变换器中)发出请求以获取公司。 这使客户端永远等待,永远不会得到响应。我尝试使用异步请求,但是我得到一个空响应,如果我强制承诺等待,它也会永远挂起。
答案 0 :(得分:1)
您是否使用PHP的集成Web服务器在本地运行您的应用程序?如果是,那就是问题。
PHP的集成Web服务器只能同时处理一个请求。
你会遇到一种僵局并且服务器1需要向服务器2发出请求
尝试在Apache / nginx /...
上运行服务器1和2