Мои GET-запросы (с Guzzle) не отправляются до тех пор, пока не будет отключен клиентский сервер (EDIT: может заблокировать другой запрос?) - PullRequest
0 голосов
/ 13 июня 2019

У меня есть два микросервиса, один - мой основной API, который отправляет запрос на кодирование видео, другой - (позволяет вызывать, если apiEncode) - это микросервис, который кодирует видео и вызывает мой основной API, когда это будет сделано (для обновления вdb).

Здесь проблема, когда я вызываю мой apiEncode, видео кодируется в 4 форматах, каждый раз, когда я звоню с get.Но я должен выключить сервер apiencode, чтобы отправить запрос.

    $promises = [];
    $client = new Client();
    for ($i = $index; $i < sizeof($sizers); $i++) {
        $mp4Format = new X264();
        $mp4Format->setAudioCodec("aac");
        $video
            ->filters()
            ->resize(new FFMpeg\Coordinate\Dimension($values[$i], $keys[$i]))
            ->synchronize();
        $video
            ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
            ->save('frame.jpg');
        $video
            ->save($mp4Format, $directory . $source . '_' . $keys[$i] . '.mp4');
        $path = $directory . $source . '_' . $keys[$i] . '.mp4';
        $jwt = authenticateJwt($path);

       $promises = $client->requestAsync('GET', '192.168.197.133:8080/api/updateVideoFormat', [
            'headers' => [
                'PATH' => $directory . $source . '_' . $keys[$i] . '.mp4',
                "ID_VIDEO" => $id,
                'FORMAT' => $keys[$i],
                'JWT' => $jwt
            ]
        ]);

    }
    try {
        $results = Promise\settle($promises)->wait();
        error_log("ok");
    } catch (Throwable $e) {
        error_log($e);
    }
}

Почему запрос отправляется, когда я выключаю apiEncode serveur?Как я могу исправить это

РЕДАКТИРОВАТЬ: Это может быть первый запрос, который блокирует другие?если да, как я могу остановить блок?закрыть связь?не ждите ответа?

Здесь мой код API сторона,

 if (!empty($source)) {
        $httpcode = 200;
       $promise = $client->requestAsync('GET', '192.168.197.133:8081/api/encode', [
           'debug' => [true
       ],
            'headers' => [
                'Content_length'=> 1000,
                'Connexion'=>'close',
                'JWT' => $jwt,
                'PATH' => $path,
                'SOURCE' => $source,
                'ID_VIDEO' => $id,
            ]
        ])->wait();
    } else {
        $httpcode = 404;
        displayErrorJSON("Not found");
    }

    return $response->withHeader('Content-Type', 'application/json')
        ->withStatus($httpcode);
}

1 Ответ

0 голосов
/ 14 июня 2019

Хорошо, я нашел решение:

Жрать не могу сделать огонь и забыть запрос.

Итак, я настроил запрос на тайм-аут, и он заработал. и не нужно асинхронно.

$client->request('GET', '192.168.197.133:8080/api/updateVideoFormat', [
    'timeout' => 0.5,
    'headers' => [
        'PATH' => $directory . $source . '_' . $keys[$i] . '.mp4',
        "ID_VIDEO" => $id,
        'FORMAT' => $keys[$i],
        'JWT' => $jwt
    ]
]);
...