demon en php ?

demon en php ? - PHP - Programmation

Marsh Posté le 05-07-2007 à 14:13:12    

Bonjour,
 
J'ai actuellement une fonction de parsing appelée à chaque fois que j'appelle une page (php)... Ce que je n'arrive pas trop à me représenter, c'est la facon dont les choses se passent quand plusieurs utilisateurs (appli intranet) se connectent simultanément...
 
En gros, la fonction récupère séquentiellement des fichiers dans des répertoires différents, parse le fichier, intègre ou non les datas en database (mysql) en fonction de leur pertinence, puis déplace le fichier dans un répertoire de stockage apres traitement...
 
Je précise la question :  
si deux ou n utilisateurs appellent la page simultanément, comment ca se passe ? le premier appelle la fonction et les autres attendent que le traitement soit fini, ou il y a une parallélisation qui est faite ?
y a t il des risques de conflit lors de l'intégration en database ou mysql gere t il les requettes comme il faut ?
 
je précise que la page qui appelle la fonction de parsing sert aussi à afficher la contenu de la database (enfin une partie), 3000 fichiers environ peuvent être traités lors du premier appel de la journée (ce qui prend plus d'une minute de traitement pour intégration de tout ce petit monde, l'affichage est quant à lui beaucoup plus rapide)
 
si la question est bête ne riez pas SVP, je suis fatigué aujourd'hui  :D

Reply

Marsh Posté le 05-07-2007 à 14:13:12   

Reply

Marsh Posté le 05-07-2007 à 15:49:08    

Le serveur web va lancer un script pour chaque connexion. Donc, oui, tu risque d'avoir plusieurs traitements en parrallèle, avec des risques d'incohérence de données :D  
 
Pour la base, je ne pense pas que tu utilises de transactions, donc mysql va traiter les requêtes dans l'ordre d'arrivée.
Tu risque d'avoir une situation de ce type :
- script 1 lit le répertoire
- script 1 parse le fichier A et insère les données en base
- script 2 lit le répertoire
- script 2 parse le fichier A et insère les données en base (donc doublons)
- script 1 déplace le fichier A
- script 2 tente de déplacer le fichier A qui n'est plus là


Message édité par mrbebert le 05-07-2007 à 15:49:44
Reply

Marsh Posté le 05-07-2007 à 15:56:38    

par curiosité, quelle est la finalité de faire insérer dans la bd, sur une action d'un utilisateur, des enregistrements qui se trouvent dans des fichiers qui se trouvent déjà sur le serveur?  
Est-ce que par hasard, ça ne serait aps fiat pour pallier le pb que php ne bosse que sur demande d'un page web par un utilisateur? Si c'est le cas, peut-être que cron pourrait t'aider ;)

Reply

Marsh Posté le 05-07-2007 à 16:01:25    

PHP fonctionne très bien en ligne de commande [:cosmoschtroumpf]

Reply

Marsh Posté le 05-07-2007 à 17:38:37    

mrbebert a écrit :

PHP fonctionne très bien en ligne de commande [:cosmoschtroumpf]


 
oui, d'où une facile exécution de scripts php commandés par cron ;)

Reply

Marsh Posté le 07-07-2007 à 13:47:50    

yep, j'ai répondu hier mais je pense que je n'étais pa authentifié car ma réponse n'a pas été postée (ce que je n'avais pas vu lol)  :sleep:  
 
donc je recommence :
 
en fait, mon "serveur apache/php" a été concu initialement comme une application de monitoring... en fait il s'agit d'une machine physique séparée de d' un serveur d'exploiatation (pour des raisons de charge/sécurité).
Je compte donc chercher toutes les 5 secondes (rafraichissement automatique de ma page php) les derniers fichiers recus sur lme serveur d'exploit, dans un répertoire partagé tout bêtement, je les parse puis les range dans un autre répertoire apres traitement...
ensuite la page php qui appelle la fonction de parsing affiche une interface ou l'utilisateur peut naviguer dans les infos contenues dans les fichiers parsés pour vérifier que tout est ok (infos recues en temps et en heure, dans le bon ordre ect...
je voudrais rendre ce système multi utilisateur pour que d'autres personnes puissent bénéficier du client (des chefs tout ca...)
 
j'ai bien une solution simple : une page unique pour l'exploitant, qui appelle la fonction de parsing et une page qui ne fait que de l'affichage... ou bien une page php différente qui ne fait que du parsing et du logging... mais c'est pas tres "propre"  :(  
 
alors je posais la question de threader l'appel de ma fonction de parsing... ou de la faire tourner en boucle sur le serveur indépendamment de la page d'affichage...
 
au pire je referais la fonction parsing en perl... mais ca représente pas mal de boulot... beaucoup de fichiers XML de types différents (8 ou 10 de mémoire)
 
je vais voir du coté de cron... mais il me semble que ca na marche que sous linux non ?
et mon "administrateur " est allergique à linux  :whistle:  
 
merci de votre attention en tout cas...
 
++

Reply

Marsh Posté le 09-07-2007 à 09:35:14    

sous windows, t'as l'équivalent "at" de cron...

Reply

Marsh Posté le 09-07-2007 à 14:02:39    

yep,
 
j'ai oublié de mentionner at dans mon message précédent... mais ca ne me convient pas car je ne peux pas répéter une action toutes les 5 secondes...
 
donc il fauit que je trouve une autre solution...  :heink:  
 
++
zav

Reply

Marsh Posté le 09-07-2007 à 16:38:57    

"at" ne permet pas de lancer une action toutes les 5 secondes?

Reply

Marsh Posté le 09-07-2007 à 17:07:34    

Tu utilises l'interpréteur php lancé en mode ligne de commande, tu fais une boucle infinie qui traite ton action et hop

Reply

Marsh Posté le 09-07-2007 à 17:07:34   

Reply

Marsh Posté le 10-07-2007 à 09:00:34    

pas tip-top une boucle infinie en php :/ Je reste convaincu que "at" est la commande qu'il faut utiliser : http://www.microsoft.com/resources [...] x?mfr=true

Reply

Marsh Posté le 10-07-2007 à 20:32:19    

rufo a écrit :

pas tip-top une boucle infinie en php :/ Je reste convaincu que "at" est la commande qu'il faut utiliser : http://www.microsoft.com/resources [...] x?mfr=true


 
yep...
 
Bin si j'ai bien compris la doc, on définit l'interval de répétition avec /every puis une heure avec heure
donc un seul lancement par jour maxi  :cry:  
 
pour la boucle infinie en php, je n'ais pas essayé... je tente et je vous tiens au courant...
 
merci,
 
zav

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed