我有两个微服务,一个是我的主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服务器时,为什么会发送请求?我怎么能解决这个问题呢?
编辑:这可能是阻止其他人的第一个请求?如果是,我如何停止阻塞?是否关闭连接?不等待响应吗?
这里是我的代码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);
}
发布于 2019-06-14 08:21:12
好吧,我找到了一个解决方案:
狂饮不能做射击和忘记的请求。
所以我设置了一个超时请求,它起作用了。而且不需要异步。
$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
]
]);
https://stackoverflow.com/questions/56576712
复制相似问题