【问题标题】:Guzzle hangs communicating two apisGuzzle 挂起通信两个 api
【发布时间】:2018-04-20 03:21:09
【问题描述】:

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

【问题讨论】:

    标签: php laravel api laravel-5 guzzle


    【解决方案1】:

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

    PHP 的集成网络服务器只能同时处理一个请求。你在

    上遇到了一种僵局

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

    尝试在 Apache/nginx/...上同时运行服务器 1 和 2...

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2019-11-09
      • 1970-01-01
      相关资源
      最近更新 更多