Guzzle挂着两个apis沟通

时间:2017-11-07 16:22:54

标签: php laravel api laravel-5 guzzle

在我的应用程序中,我运行了两个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(在变换器中)发出请求以获取公司。 这使客户端永远等待,永远不会得到响应。我尝试使用异步请求,但是我得到一个空响应,如果我强制承诺等待,它也会永远挂起。

1 个答案:

答案 0 :(得分:1)

您是否使用PHP的集成Web服务器在本地运行您的应用程序?如果是,那就是问题。

PHP的集成Web服务器只能同时处理一个请求。

你会遇到一种僵局
  

并且服务器1需要向服务器2发出请求

尝试在Apache / nginx /...

上运行服务器1和2