Faire PHP socket_connect délai d'attente
J'ai une petite application que j'ai créé pour analyser la connexion réseau. Il fonctionne à partir d'un navigateur et se connecte à un local de PHP/Apache serveur. Puis, il demande à PHP d'envoyer un paquet ping à travers une socket raw. Le problème est que si l'hôte, je suis en train de ping n'est pas en vie ou ne répond pas aux pings, nous n'avons jamais obtenir une réponse à partir du serveur.
Je beleave le socket demande de vies jusqu'à ce que apache est redémarré. J'ai obtenu des résultats mitigés à partir de mon application dernièrement, et je suis à blâmer apache trop à l'aide de nombreux supports. Actuellement, j'ai mis de l'appel AJAX est le délai d'attente et j'ai été heureux avec elle. Mais j'ai vraiment besoin de faire de PHP ne le timeouting de sorte que je n'aurai pas de 500 000 sockets ouverts à un ordinateur hôte inaccessible.
Un exemple de code:
$sockconn = @socket_connect($socket, $target, null);
if(!$sockconn)
{
$raw['error'] = socket_strerror(socket_last_error());
$raw['status'] = false;
return $raw;
}
C'est la fonction qui ne sera pas de délai d'expiration. J'ai besoin d'obtenir de délai d'attente. Aussi le script PHP le temps d'exécution N'a PAS d'incidence sur les sockets.
Je suis paumé.
fsockopen()
à la place. Il fait beaucoup de choses beaucoup plus facile, il est plus facilement disponible (c'est une fonction de base qui doivent être explicitement désactivé, alors que les prises d'extension doit être explicitement activé), et le 5ème argument permet de définir le délai de connexion par appel.Dans théorie oui (même si, avec la plus avancée
stream_socket_*
des fonctions plutôt que des fsockopen()
). Dans la pratique, il serait un énorme pain PITA. Je suppose que vous traiterait avec TCP, la plupart du temps c'est ce que font les gens. Si vous voulez une PHP ICMP echo de la mise en œuvre, même si, je l'ai déjà fait... prendre un coup d'oeil à ceci: download.networkm.net/code/php/class.ping.1.0.tar.gz (à noter qu'il a été écrit pour PHP4, et quand mon OO compétences gauche... quelque chose à désirer, mais il fonctionne je l'ai utilisé une couple de fois)Oh et puis il y a tout un tas de hasard de débogage de la merde gauche. Seulement supprimer les lignes 291-296
Nouveau! Amélioration de la! Généralement plus faciles à utiliser et pas tout à fait comme de la merde! download.networkm.net/code/php/class.ping.2.0.tar.gz
Sous licence LGPL, et pour résumer que, fondamentalement signifie "Oui, vous pouvez l'utiliser pour tout ce que vous voulez" 🙂
OriginalL'auteur Axel Latvala | 2012-08-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir les délais pour la lecture et l'envoi à l'aide de la suite de options:
Alternativement, vous pouvez utiliser les sockets non bloquant et interroger périodiquement la prise pour voir si l'hôte distant a répondu.
OriginalL'auteur Sjoerd
Essayez de définir default_socket_timeout.
confirmer, ne fonctionne pas
OriginalL'auteur Sjoerd