2017-05-12 11 views
0

私はLightspeedサーバーを実行していて、組み込みのLSキャッシュを使ってページをキャッシュしています。Guzzleがリクエストを正しく起動しない

ページが保存されるときにキャッシュにパージ要求を発行するプラグインを作成していますが、Guzzleがバッチリクエストを正しく送信できないようです。

Guzzleからエラーは発生していませんが、PURGEリクエストがサーバーに送信されることはありません。ただし、代わりにcURLを実行すると、うまく動作します。

がつがつ食う

$batch = \Guzzle\Batch\BatchBuilder::factory() 
    ->transferRequests(20) 
    ->bufferExceptions() 
    ->build(); 

$client = new \Guzzle\Http\Client(); 
$client->setDefaultOption('headers/Accept', '*/*'); 

foreach ($paths as $path) 
{ 
    $request = $client->createRequest('PURGE', $path); 
    $request->setProtocolVersion('1.0'); 
    $request->addHeader('Host', 'mydomain.com'); 
    $batch->add($request); 
} 

$requests = $batch->flush(); 
$batch->clearExceptions(); 

cURLの

foreach ($paths as $path) 
{ 
    $curl = curl_init($path); 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE"); 
    curl_exec($curl); 
} 

答えて

1

まずがつがつ食う3.xのは、(あなたが使用していること)古くなっているので、6.xのをがつがつ食うために移行しようサポートされていません。がつがつ食う6.xので

それは上記のコードはあなたよりも少し複雑ですが、それは大きな利点がある

$client = new \GuzzleHttp\Client(); 

$requestGenerator = function() use ($client, $paths) { 
    foreach ($paths as $path) { 
     yield $client->requestAsync('PURGE', $path); 
    } 
} 

$allRequests = \GuzzleHttp\Promise\each_limit(
    $requestGenerator(), 
    5 // How many concurrent requests should be done? 
); 

$allRequests->wait(); 

のようになります - 同時実行を。あなたの仕事のために、それは大きな改善です、IMO。

+0

Guzzle 6を依存関係として追加し、このコードをプラグインしました。これでリクエストは正常に送信されました。 Alexeyに感謝します。 –

関連する問題