2016-10-31 1 views
6

Le script ci-dessous fonctionnera indéfiniment et sera initié en utilisant php myscript.php.Quand devrait-on utiliser curl_close()?

http://example.com/longpolling.php ne répondra que s'il a quelque chose à communiquer à php myscript.php, et la requête curl ci-dessous expirera avant que longpolling.php atteigne sa limite de temps. Dois-je fermer et rouvrir la boucle à chaque boucle, ou la garder ouverte indéfiniment.

<?php 
// php myscript.php 
$options=[ 
    CURLOPT_URL=>'http://example.com/longpolling.php', 
    CURLOPT_RETURNTRANSFER=>true, 
    CURLOPT_CONNECTTIMEOUT => 300, 
    CURLOPT_TIMEOUT=> 300 
]; 
$ch  = curl_init(); 
curl_setopt_array($ch, $options); 
while (true) { 
    $rsp = curl_exec($ch); 
    // Do something 
    //curl_close($ch); //should I close and reopen? 
} 
+0

Si vous utilisez 'curl_close' dans la boucle while, vous devez à nouveau initialiser curl. car curl_init, initialise une nouvelle session et retourne un handle cURL pour l'utiliser avec les fonctions curl_setopt(), curl_exec() et curl_close(). – Kumar

+0

@Kumar Exactement. Y a-t-il des raisons de mémoire/performance/fiabilité pour le faire? – user1032531

+0

@apokryfos Je ne dis pas qu'il est juste de le faire, mais il semble fonctionner parfaitement en le laissant ouvert. Est-il documenté qu'il est "supposé traiter une seule requête"? – user1032531

Répondre

2

Si les URL sont sur le même serveur réutilisant la poignée conduira à une augmentation des performances. cURL réutilisera la même connexion TCP pour chaque requête HTTP au serveur.

Here est également un bon point de référence pour ce problème.

0

Il vous manque la condition de sortie. En supposant qu'il est une réponse du script distant, le code doit être:

<?php 
// php myscript.php 
$options=[ 
    CURLOPT_URL=>'http://example.com/longpolling.php', 
    CURLOPT_RETURNTRANSFER=>true, 
    CURLOPT_CONNECTTIMEOUT => 300, 
    CURLOPT_TIMEOUT=> 300 
]; 
$ch  = curl_init(); 
curl_setopt_array($ch, $options); 
$rsp = false; 
while (!$rsp) { 
    $rsp = curl_exec($ch); 
} 
curl_close($ch); 
// Do something 
+1

missing $ at while (! Rsp) => while (! $ Rsp) – Fky

+0

En effet. À votre santé. –