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

JavaScript Discussion :

[AJAX] Rafraîchissement automatique : surveiller les modifs en base de données


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 13
    Points
    13
    Par défaut [AJAX] Rafraîchissement automatique : surveiller les modifs en base de données
    Bonjour à tous,

    J'ai comme projet le développement d'un jeu sur navigateur, et pour rendre la gestion du jeu plus dynamique, je pense y intégrer certains concepts AJAX séduisants.

    Au départ je me disais que j'allais gérer le rafraîchissement par un timer, du style toutes les 3 secondes j'appelle une URL qui me renvoie soit rien, soit les données à mettre à jour pour le client.

    Puis au fil de mes recherches, j'ai vu parler d'une technique qui consiste à faire ça un peu différemment : j'ouvre une URL, qui au lieu de ne rien renvoyer, boucle tant qu'il n'y a rien à renvoyer, jusqu'au timeout si besoin. S'il y a quelque chose à renvoyer, elle le renvoie instantanément. Et côté client, dès que le retour de l'URL se fait (timeout ou réponse cohérente), je rappelle immédiatement l'URL pour récupérer le paquet suivant.

    Ce concept de rafraîchissement semble plus performant que le timer côté client, car il effectue moins de requêtes HTTP, et récupère la mise à jour dès qu'elle est disponible (et non pas après 3 secondes)

    Pour illustrer ce concept, j'ai commencé à développer un chat, mais je me pose des questions de performance côté serveur. Sur le serveur j'utilise PHP et MySQL. Le script qui vérifie s'il n'y a rien à renvoyer fait en boucle une requête SQL, tant que celle-ci ne renvoie pas de résultat, et sort dès qu'il y en a. Mon souci est de trop solliciter le serveur.... Pour l'instant la seule solution à laquelle j'ai pensé pour ne pas trop l'agresser, c'est rajouter un sleep dans la boucle qui fait la requête SQL. Ca m'embête un peu, car du coup je retrouve le désavantage du timer...

    Donc en gros, j'aurais besoin d'une bonne idée, d'un conseil, pour pouvoir tester si quelque chose a changé en base... Il faudrait que je puisse "monitorer" le changement d'état de quelque chose sur le serveur, quelque chose qui soit déclenché par une mise à jour en base. Si quelqu'un a une idée, je suis preneur

    Merci

  2. #2
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Regarde comment sont construits les clients de chat existants, je pense pas que la boucle côté serveur soit la meilleure solution.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Je voudrais vraiment éviter de faire des requêtes HTTP toutes les X secondes... et c'est ce que j'ai vu dans les quelques chats ajax que j'ai trouvés ça et là. (j'ai peut-être mal cherché...)

    J'ai parlé de chat pour donner un exemple, c'était l'application qui me semblait la plus rapide à développer pour tester le concept. Ce n'est peut-être pas le meilleur système de rafraîchissement pour un chat, quoique....

    En fait pour un chat avec timer ça donnerait ça :
    - toutes les 3 secondes j'appelle une URL
    - l'URL requête en base pour voir si une nouvelle phrase est apparue
    - si une nouvelle phrase est apparue, je la renvoie
    - sinon, je ne renvoie rien

    Avec ce système, on visualise la phrase d'un type au maximum 3 secondes après qu'il l'ait insérée en base.

    Avec le système dont je parle ça donnerait ça :
    - j'appelle une URL
    - l'URL requête en base pour voir si une nouvelle phrase est apparue, en boucle jusqu'à ce qu'il y ait quelque chose, ou dans la limite d'un timeout fixé
    - côté client, dès que j'ai le retour, je le traite et je rappelle immédiatement l'URL

    Ensuite je peux fixer ma durée de timeout côté serveur, par exemple 10 secondes : ça veut dire que le client appelera mon URL toutes les 10 secondes. Mais dès qu'il y aura une nouvelle phrase insérée dans la base, l'URL que le client est en train d'appeler la renverra, donc pas de décalage de 3 secondes comme dans le 1er exemple.

    Je sais pas si je suis bien clair là. En gros c'est pour éviter d'avoir de la latence côté client (le décalage de 3 secondes de cet exemple), et également pour limiter le nombre de requêtes HTTP effectuées par le client.

    Maintenant comme j'essayais de l'expliquer dans mon 1er post, mon souci ça va être la fonction côté serveur, qui va devoir requêter en boucle dans la limite de son timeout pour voir s'il n'y a pas quelque chose de nouveau à envoyer au client. C'est sur ce point que je cherchais des astuces.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/06/2011, 15h09
  2. [AJAX] Rafraîchissement automatique sur une liste déroulante
    Par frutix dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/04/2007, 16h09
  3. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08
  4. Centraliser les accès à la base de données
    Par romaintaz dans le forum JDBC
    Réponses: 10
    Dernier message: 13/01/2006, 11h37
  5. Réponses: 3
    Dernier message: 17/12/2005, 11h47

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