Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1331 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requête MySQL en attente de résultat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête MySQL en attente de résultat

n°1727299
osef
Posté le 01-05-2008 à 17:30:19  profilanswer
 

Bonjour à tous,
 
Je cherche à faire en sorte qu'une requête MySQL lancée par un mysql_query() attende qu'il y ai des résultats avant de les renvoyer à PHP. C'est à dire que je veux que le mysql_query() bloque volontairement l'execution du script PHP tant qu'il n'y a pas de résultats pour la requête.
 
Pourquoi ? J'ai besoin de lancer un SELECT sur une table et d'attendre que des lignes soient insérées par un autre script executé en parallèle, avant de continuer l'execution du premier script et donc le traitement des données.
 
J'ai fouillé dans la documentation MySQL à la recherche d'une syntaxe pour bloquer une requête mais je n'ai rien trouvé d'explicite, à part une partie que je n'ai pas trop compris : http://dev.mysql.com/doc/refman/5. [...] model.html
 
Je pourrais faire un "while" avec un "sleep" de 1 seconde et une requête MySQL à chaque passage, mais ca serait très lourd pour la base de données à mon avis.
 
Des propositions ? :D


Message édité par osef le 01-05-2008 à 17:31:35
mood
Publicité
Posté le 01-05-2008 à 17:30:19  profilanswer
 

n°1727338
osef
Posté le 01-05-2008 à 20:15:32  profilanswer
 

Merci beaucoup pour ta réponse complète, ca fait plaisir à lire :)
 
Pour ton système "producteur-consommateur", j'ai réalisé exactement la même chose a base de while + file_exists + sleep(1), et j'ai justement pensé la même chose concernant les accès au disque, il ne va pas trop aimer. D'autant plus que j'ai testé en faisant tourner le script 5 fois en parallèle et les temps de réponses ont doublé voire triplé.
 
Le but de mon système est qu'il y ai X clients qui attendent que quelqu'un insère un enregistrement dans la base, donc il me faut quelque chose de léger.
 
Pourrais tu m'en dire plus concernant la solution "engine heap" s'il te plait ? :)

n°1727365
osef
Posté le 01-05-2008 à 21:05:22  profilanswer
 

Ah oui bien vu, je n'avais pas pensé aux sessions, merci beaucoup pour cette solution :)
 
Mais les sessions sont stockées avec des fichiers sur le disque dur, ne va t-on pas retrouver le problème des accès disque ? Je présume que la gestion des sessions se fait en mémoire vive une fois les fichiers chargés ?

n°1727428
osef
Posté le 01-05-2008 à 23:26:43  profilanswer
 

Je crois que j'ai un problème :(
 
Pendant que le consommateur vérifie l'existance de la variable de session, le producteur ne peut pas la modifier et donc son script reste bloqué.
 
Après avoir fait quelques tests, il semblerait que c'est parce que le consommateur occupe la session pendant qu'il fait le while, donc le producteur doit attendre que la session soit "libérée" pour pouvoir écrire une variable dedans.
 
Si j'enlève le session_start dans le script du producteur, il n'est plus bloquant, mais du coup il ne sert plus à rien :D
 
Help !

n°1727435
osef
Posté le 01-05-2008 à 23:49:21  profilanswer
 

Je suis sur mon localhost avec un WAMP.
 
Sinon j'ai testé la solution avec apc_store/apc_fetch et ca marche super bien, aucun bloquage !
Mais il me faudra quand même utiliser les sessions pour authentifier les clients, car le système s'executera dans un espace privé...
Sachant qu'un consommateur pourra être producteur (donc même session utilisée pour 2 requêtes simultanées), je vais être coincé :(


Message édité par osef le 01-05-2008 à 23:57:42
n°1727439
osef
Posté le 01-05-2008 à 23:58:03  profilanswer
 

Ah j'ai édité mon message pendant que tu as posté le tiens :D

n°1727445
osef
Posté le 02-05-2008 à 00:23:37  profilanswer
 

Mouarf, moi qui voulait juste faire un petit chat PHP pour passer le temps, je me retrouve avec une grosse prise de tête :D
Oui en effet, je voulais faire un chat qui allait vérifier sur le serveur en permanence si de nouveaux messages sont reçus. Pour ce faire, il y avait plusieurs solutions :
 
- La solution basique qui consiste à faire une requête AJAX toutes les X secondes (1 ou 2) sur le serveur pour vérifier les nouveaux messages, mais ca me parait beaucoup trop lourd car cela fait plein de requêtes HTTP sur le serveur.
 
- La solution que je voulais faire qui consiste à faire une requête AJAX permanente (mais avec un timeout de 1 minute) executant un script PHP qui reste bloqué tant qu'il n'y a pas de nouveaux messages, donc avec une boucle PHP (fichiers, session, apc) ou MySQL (requête bloquante ?) qui vérifie toutes les 100 ms. Cela ne fait qu'une requête HTTP par minute, mais pose les problèmes que l'on a vu ci-dessus.
 
Je sais qu'il existe déjà plein de chat en PHP sur le net, mais je voulais me lancer un petit défi et construire quelque chose moi même.
Bon bah je crois que je vais retourner jouer aux Lego :(


Message édité par osef le 02-05-2008 à 00:24:01
n°1727449
osef
Posté le 02-05-2008 à 00:28:24  profilanswer
 

Oui mais je voulais pas de rafraichissement toutes les 5 secondes :D Je voulais un affichage instantané, donc en passant par une requête AJAX "permanente", c'est à dire en attente perpetuelle d'un nouveau message. D'autant plus que le chat aurait géré plein d'autres trucs par la suite, comme la connexion/déconnexion des amis, et des trucs comme sur MSN par exemple :)


Message édité par osef le 02-05-2008 à 00:30:03
n°1727457
osef
Posté le 02-05-2008 à 00:44:31  profilanswer
 

Oui justement si je passe par AJAX/PHP c'est pour éviter un truc comme Java, je voulais un chat qui ne nécessite aucun plugin :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requête MySQL en attente de résultat

 

Sujets relatifs
[Resolu] Création de rapport rdlc à partir d'une base de donnée MySqlRequete XML par VBA Excel
Forger une requete de recherche sur plusieurs tables.VB6+MySQL : Test de doublons
VB6 + MySQL : Test de doublons[MySQL] SELECT une entrée, celle d'avant et celle d'après en 1 fois ?
Problème erreur ifoptimisation de requéte
afficher des image stocker dans bdd mysql[MYSQL] supprimer 'doublon' lors d'un select
Plus de sujets relatifs à : Requête MySQL en attente de résultat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR