2010-12-16 182 views
1

Je suis en train d'écrire un petit client de messagerie instantanée basé sur le Web, il fonctionne bien, mais je rencontre des problèmes.Prototype JavaScript Ajax FIFO Queue

Le système est écrit avec PHP et JavaScript, il utilise des identifiants d'authentification qu'il place sur chaque page, lorsqu'une requête ajax est faite, il doit inclure cet identifiant d'authentification. Ce n'est pas un système parfait mais je n'ai aucune possibilité de le changer.

le système de messagerie instantanée utilise exécuteurs périodiques (bibliothèque Prototype), il y a 2 appels périodiques, il fait:

  1. mise à jour la liste des contacts, car cela ne marche pas changer très souvent, il est mis à jour toutes les 30 secondes ou si
  2. vérifier pour les nouveaux messages, cela se produit toujours 5 secondes en ce moment.

La question est:

exécuteur périodique fait appel à mettre à jour la liste des contacts, utilise l'identifiant d'authentification, le côté PHP prend cette demande, vérifie l'identifiant d'authentification, exécute la tâche, retourne la nouvelle liste Format JSON avec un nouvel identifiant d'authentification à utiliser pour les demandes suivantes.

Si une vérification de nouveaux messages (temporisés) ou l'envoi d'un message (non chronométré) se produit avant le retour de la première fonction, l'ID d'authentification n'a pas encore été mis à jour. Par conséquent, il utilise le même identifiant d'authentification que la requête précédente. Cet identifiant d'authentification est rejeté par le côté PHP du système. Je cherche un moyen de sérialiser les demandes dans une file d'attente de style FIFO, ce qui signifie que toute requête ajax faite (vérifier les messages, vérifier les contacts, envoyer un message) peut être poussée dans la file d'attente et s'exécutera dès que l'appel ajax précédent est terminé (100% fait et renvoyé)

Répondre

1

Il peut être judicieux de créer une classe de file d'attente de requêtes et de l'utiliser pour gérer vos requêtes ajax. Je suis sûr que vous pouvez trouver quelque chose faite déjà par googler, mais voici ce que je trouve cela devrait fonctionner pour vous:

http://positionabsolute.net/blog/2007/04/ajax-request-queue.php

vous devez remplacer tous vos ajax appelle à utiliser cette nouvelle fonction, mais la modification d'une classe comme ceci devrait résoudre votre problème.