2017-06-25 1 views
0

J'ai un problème avec mon client Guzzle. Je définis le délai d'attente pour l'exemple 1.0 et dans certains cas je dors (5). Guzzle de toute façon attendre sur la réponse quand devrait juste jeter exception. client:Guzzle Pool ne respecte pas le délai

$requests[] = new Request('GET', $path, [ 
     'timeout' => 1, 
     'connect_timeout' => 1 
    ]); 

$pool = new Pool($this->client, $requests, [ 
     'concurrency' => 5, 
     'fulfilled' => function ($response, $index) use ($response_merger) { 
      $response_merger->fulfilled($response); 
     }, 
     'rejected' => function ($reason, $index) use ($response_merger) { 
      $response_merger->error($reason); 
     } 
    ]); 

et mon itinéraire avec retard:

$app->get('/timeout', function() use ($app) { 
    sleep(5); 
    return (new JsonResponse())->setData([ 'error' => 'My timeout exception.' ])->setStatusCode(504); 
}); 

Je suis toujours 504 à mon exception de délai d'attente, quand je ne devrais pas l'obtenir parce que délai d'attente est réglé.

Je l'ai fait avec set client, mais ce n'est pas une solution pour moi car j'ai besoin d'un timeout personnalisé pour certaines requêtes, pas de clients.

$this->client = new Client([ 
     'timeout' => 3.0, 
     'connect_timeout' => 1.0 
    ]); 

Répondre

0

Je pense que vous avez la mauvaise signature en tête pour new Request(). À partir des documents:

// Create a PSR-7 request object to send 
$headers = ['X-Foo' => 'Bar']; 
$body = 'Hello!'; 
$request = new Request('HEAD', 'http://httpbin.org/head', $headers, $body); 

Le troisième paramètre concerne les en-têtes HTTP et non les options.