IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Faire un script qui ne s'arrête jamais : possible ?


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Faire un script qui ne s'arrête jamais : possible ?
    Bonjour à tous !

    Dans le cadre de mon stage, j'ai développé un script PHP qui est constitué d'une phase d'attente et d'une phase de traitement.
    Dans la phase d'attente, le script attend de recevoir une trame HTTP de la part d'un autre serveur.

    En fait, j'aimerais que ce script "attende" cette trame HTTP même si elle arrive 3 heures après.

    Pour le moment, j'ai modifié mon php.ini et mon httpd.conf pour augmenter tout ce qui parle de timeout et de temps d'exécution de script, mais au bout de 700 secondes survient toujours un échec, et j'obtiens un "Erreur de chargement de la page" dans mon navigateur.

    Est-ce qu'il y a quelque chose que j'aurais oublié de changer ?
    Peut-être que c'est intrinsèquement impossible de faire un script qui attend indéfiniment, je ne sais pas.

    Merci pour vos lumières !

  2. #2
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut,

    Oui c'est une très mauvaise idée de faire un script qui tourne indéfiniment, car tu as de grandes chances de faire tomber ton serveur et que du coup tout ton site soit indisponible.

    A mon avis il faut partir dans une autre direction.

    Explique nous un peu plus sur ton projet on pourra peut-être t'aider...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Le projet se place dans un contexte de services vocaux (comme la messagerie quand on appelle le 888)

    En gros, le serveur web doit exécuter des scénarios vocaux (lancer des programmes) lorsqu'il reçoit une trame HTTP lui signalant qu'un utilisateur essaye d'appeler le serveur vocal avec son téléphone.

    Il existe déjà un système qui va envoyer une trame HTTP à mon serveur WEB lorsqu'un utilisateur va appeler le serveur vocal, pour lui signaler la connexion. (Je ne peux pas modifier ce système)

    Cependant, il faut que le serveur Web de son coté soit prêt à recevoir cette trame HTTP n'importe quand, d'où le script qui tourne en continu.

    (Le serveur Web ne sert qu'à ça, et il y aura GRAND MAXIMUM 10 utilisateurs qui accèderont à ce serveur Web au même moment, il n'y a pas de site internet autour ni rien)

    (Je précise que la trame HTTP que le serveur Web doit attendre est un HTTP POST qui contient des données spécifiques que le script "qui attend" va utiliser)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse (qui a disparu, je ne sais pas pourquoi)

    Faire un Web Service me semble un peu gros pour les besoins de mon application.

    En fait il y a déjà tout qui marche et j'ai juste un problème de durée d'exécution, donc ça me fait un peu mal de tout refaire

    Si c'est vraiment nécessaire je referai tout bien sûr.

    Du coup j'ai des questions :

    Est-ce que quelqu'un sait d'où vient mon problème de durée d'exécution ?
    De plus, pourquoi est-ce qu'un script qui tourne en permanence mais ne fait rien (il ne fait qu'écouter sur un socket) pourrait faire planter le serveur ?

    ça peut sembler stupide comme question désolé

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Sans partir sur un webservice complet , si ton script attent une trame HTTP , c'est déjà ce que fait ton serveur Web.

    Quel est l'intérêt de faire attendre le script plutôt que de simplement le lancer par le serveur web à chaque requête ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    En fait j'ai pas tout expliqué, c'est un petit peu plus compliqué que ce que j'ai dit.

    Il y a deux grands composants dans cette partie du projet :

    1) Mon serveur Web
    2) Un système capable de détecter si un utilisateur a appelé le service vocal et capable d'envoyer une trame HTTP quand cela arrive

    Voilà comment se déroule le processus :

    1) Le serveur Web envoie au système un HTTP POST contenant une commande de mise en attente d'un utilisateur

    2) Quand un utilisateur appelle le service vocal, le système "répond" au serveur Web en lui envoyant une réponse HTTP (200 OK)

    3) A ce moment là, le Serveur Web sait qu'un utilisateur a appelé le service vocal et peut lancer l'exécution du traitement correspondant

    Autrement dit, la trame HTTP signalant la connexion d'un utilisateur ne sera lancée que si le serveur Web a ordonné (via un HTTP POST) au système de se mettre en état d'attente avant. Cette trame constitue la réponse à ce HTTP POST. Du coup si le serveur Web n'est pas en attente d'une réponse HTTP, alors le système ne renverra rien.

    Du coup ta solution n'est pas possible il me semble, car le serveur Web ne serait pas en attente d'une réponse HTTP, et donc le système flemmard ne le préviendrait pas :/

  7. #7
    Membre actif Avatar de Legenyes
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 174
    Points : 207
    Points
    207
    Par défaut
    bonjour,

    mettre le temps dexecution sur infini est comme expliqué plus haut une très mauvaise idée, sauf si tu veux que ton serveur tombe en rade.

    Le delai d'attende qui expire par ton navigateur est normale. J'ai deja remarqué que les navigateur internet ne sont pas fais pour tourné en tache de fond en attendant. Ton navigateur est un client HTTP et lui aussi a une durée limite d'execution. Si apres x seconde il n'as pas recu de réponse du serveur il plante.

    Si la solution du service web ne te plais pas, pourquoi ne pas faire tourner un script CRON qui toutes les x minutes et vérifie en DB ou dans un fichier que tu n'as pas recu une demande a traiter
    http://www.anaprosy.be - Solution et réalisation informatique

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/08/2012, 09h17
  2. Application ASP.Net qui ne s'arrête jamais
    Par Médinoc dans le forum ASP.NET
    Réponses: 31
    Dernier message: 25/03/2009, 10h07
  3. Script qui s'arrète !! Comment faire autrement ?
    Par Xplosif² dans le forum C++
    Réponses: 5
    Dernier message: 25/02/2006, 22h10
  4. Faire un script qui me créer un script
    Par tripper.dim dans le forum Oracle
    Réponses: 8
    Dernier message: 30/11/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo