ZendFramework logo

Voici un article que vous allez certainement trouver inutile. Mais c'est le genre d'article qui peut sauver la vie d'un newbie en stage ;-)

La grande question : Comment éviter les erreurs TCP générés par le Zend_Http_Client ?

Deux solutions :

  • Mettre en place des catch d'exception au niveau applicatif et gérer un retry manuel => Bof ..
  • Réécrire la classe Zend_Http_Client_Adapter_Socket pour gérer un retry automatique de la création de la socket => YES !

Il suffit pour cela de replacer le code suivant qui se trouve à la ligne 225 du fichier /Zend/Http/Client/Adapter/Socket.php

$this->socket = @stream_socket_client($host . ':' . $port,
                                                  $errno,
                                                  $errstr,
                                                  (int) $this->config['timeout'],
                                                  $flags,
                                                  $context);

par :

$max_retry = 5;

for ($i = 0; $i < $max_retry; $i++) {

      $this->socket = @stream_socket_client($host . ':' . $port,
                                      $errno,
                                      $errstr,
                                      (int) $this->config['timeout'],
                                      $flags,
                                      $context);

     // If socket is OK
     if ($this->socket) {
           break;
     }

    sleep(1);
}

Le hack est très simple, et vous voilà sauvé des problèmes de connexions qui sautent ... ;-)

  • Check-list Docker : 10 questions à se poser avant de démarrer un projet

    De plus en plus de projets utilisent la conteneurisation comme outil d’accélération du déploiement de systèmes informatiques. Malheureusement ces nouvelles technologies autour de la conteneurisationsont pas sans impacts sur l'architecture de la solution mise en place et quand aux choix à réaliser avant de démarrer un projet. Voici un ensemble de questions que je juge pertinents de se poser avant de démarrer un projet avec des containers Docker. Les containers apportent de nouveaux paradigmes auxquels nous n'avons pas encore suffisamment de reculs pour adopter des réflexes naturels.

1. Le , 12:47 par AlexNoox
e4bb07a364870ef3ee41670c25ea983c

Je suis pas sûr que ce soit une si bonne idée..

En effet le problème initial est résolu, mais :
- Si tu met à jour zend framework -> ça marche plus.
- Ce n'est pas le but initial de cette méthode, elle gère la connexion tout court et renvoi bien une exception en cas d'erreur.
- Si au bout de 5 connexions ca fonctionne toujours pas, tu es quand même obligé de mettre en place un try/catch

Je pense que le retry manuel est donc la solution la plus maintenable, évolutive et dans la philosophie objet et d'intégrité du framework.

PS : désolé de jouer les rabat-joies ;)

2. Le , 20:01 par Ludovi Toinel
9ab09dd3e305f924f8930e20e1a35843

Je suis d'accord avec toi pour la maintenabilité. Je dois demander a zend d'integrer ma contribution :-)
Il faudrait mettre le maxretry dans l'objet de configuration.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.