2011-12-18 4 views
1

Je prévois le développement d'un serveur écrit en PHP capable de traiter les demandes de socket. J'utilise un hôte gratuit (Heliohost) pour tester, et il a cPanel. Jusqu'à présent, la seule chose que j'ai pu imaginer pour avoir un script PHP toujours en cours est d'écrire un travail cron qui exécute un script bash pour vérifier ps pour voir si le PHP est déjà en cours d'exécution, et si ce n'est pas le cas, commence le.Serveur de socket PHP persistant

Y a-t-il un meilleur moyen? Peut-être un moyen pour un thread PHP d'être démarré sur une requête HTTP et continuer à fonctionner dans Apache après que la demande a été traitée?

Répondre

2

Vous ne réussirez presque certainement pas à exécuter des processus persistants à partir d'Apache. Il est conçu pour empêcher ce scénario (bien que si vous pouvez obtenir à l'appel système fork(2), il est probablement possible). Je ne recommanderais pas d'essayer.

Ce qui aurait plus de sens si vous utilisez un fournisseur d'hébergement qui vous donne la possibilité d'écrire vos propres spécifications crontab(5)et exécuter l'interpréteur PHP directement. Ensuite, vous pouvez simplement ajouter une ligne à votre crontab(5) comme:

@reboot /path/to/php /path/to/script.php 

Votre script devrait probablement effectuer les tâches habituelles daemonization de sorte que cron(8) n'est pas bloqué en attente de votre processus pour quitter.

+0

En fait, l'interface cPanel m'empêche d'écrire '@ reboot' - je dois entrer les cinq champs temporels. Quelle commande suggérez-vous que j'utilise pour «démoniser» l'interpréteur PHP? – Reinderien

+0

De nombreuses bibliothèques C fournissent une fonction 'daemon (3)' - pouvez-vous l'appeler facilement depuis PHP? Si non, pouvez-vous écrire un petit emballage autour d'elle? Si votre système ne le fournit pas, une fonction 'daemonize()' est fournie dans la [Programmation avancée dans l'environnement Unix, 2ème livre d'ed] (http://www.apuebook.com/), fichier 'daemons/init .c'. – sarnold

+0

Qu'en est-il juste '/ path/to/php /path/to/script.php &'? Cela devient un travail d'arrière-plan, non? – Reinderien