Question

Comment puis-je écrire un temps réel en utilisant le chat xajax et PHP?

En d'autres termes, est-il un moyen d'envoyer des réponses xajax du serveur à plusieurs clients? Ou est la seule possibilité de vérifier les nouveaux messages toutes les quelques secondes sur le côté client?

Était-ce utile?

La solution

Non. Les clients doivent "interroger" le serveur repeatadly.

Je pense que la clé ici est de penser design d'interaction. L'astuce est de tromper l'utilisateur en lui faisant croire que le chat est instantanée, mais quand, en réalité, il met à jour une fois tous les 1 ou 2 ou 3 ou 10 secondes.

Idées:

1) Lorsque l'utilisateur envoie un message, afficher directement dans le chat et déclencher un scrutin.

2) Si un sondage revient avec plusieurs messages d'autres utilisateurs, ne pas les ajouter à la fois, les ajouter en fait sur une période de 1-2 secondes environ, avec un espacement aléatoire, ce qui en fait ressembler à QU'ILS re venir en « instantanément » et indépendamment. (Si un groupe de messages viennent à la fois dans l'utilisateur est très rapide pour se rendre compte que le chat mis à jour là-bas et puis, et non continiously.)

3) Si l'utilisateur est inactif pour le montant x de temps. Laissez tomber le taux de sondage pour une fois 10sec environ.

4) Si l'utilisateur est actif, à savoir l'envoi d'un grand nombre de messages, sondage le plus souvent.

5) Avoir un fichier statique pour chaque canal que votre écriture le temps le chat dernière mise à jour à. Pour chat-teenfun-lastupdate.txt instance de fichier a le contenu 1224934239 ou quel que soit le format du temps que vous préférez. Servez ce fichier statiquement et laisser les clients sondent ce fichier afin de vérifier si la chaîne a mis à jour, plutôt que d'appeler chat-poll.php?ch=teenfun qui effectue une vérification dynamique. Les fichiers statiques sont servis autour de 10-100 fois plus rapidement, en fonction du travail impliqué pour le script dynamique, et vous en aurez besoin quand vous obtenez des sondages plus de 250 utilisateurs.

Bonne chance et amusez-vous!

/ 0

PS. Sinon, vous pouvez effectivement laisser les clients faire un appel ajax au serveur et les garder « suspendus ». est vous acceptez leur demande et faire semblant de commencer à envoyer des données en arrière, mais vous venez de mettre en pause. Quand quelque chose vous happends terminé la réponse avec les données approriate. Pour cela, je travaille crois que vous auriez besoin d'écrire votre propre serveur HTTP cependant, qui fait cela en particulier, comme vous ne pouvez pas avoir 250 processus php qui traînaient dans la mémoire. Peut-être que Lighttpd pourrait être utilisé de cette manière en quelque sorte avec ce mod cache LUA. Je ne sais pas. Ce serait intéressant cependant. L'enfer, je dois essayer quelque temps:)

Autres conseils

Bien sûr, il est, mais je ne pense pas que ce sera très efficace avec de nombreux utilisateurs. Vous pouvez faire vote où chaque client interroge le serveur pour voir s'il y a des nouveaux messages, ou vous pouvez utiliser le technique comète dans laquelle le serveur peut pousser de nouveaux messages aux clients - Vérifiez le plug-in Comet xajax. Comment cela serait mis en œuvre en utilisant xajax et PHP est au-delà de moi, mais voici ce que je voudrais essayer de la mettre en œuvre.

Que chaque client se connecter au serveur (se connecter, etc.), puis:

  1. Pour chaque message envoyé par un client (expéditeur) mettre à jour la file d'attente de messages pour le client (récepteur)
  2. Laissez serveur sondage client pour les nouveaux messages dans la file d'attente / Poussez les nouveaux messages via la comète.
  3. Mise à jour GUI en cas de nouveaux messages.
  4. Rincer, faire mousser, répéter

L'utilisation d'un vrai serveur de messagerie instantanée comme ejabberd pourrait aller un long chemin, être plus efficace et permettre aux utilisateurs de se connecter via les clients de bureau (si c'est ce que vous voulez). Je serais probablement utiliser comme un back-end, OIEau ejabberd serait le serveur et PHP serait le client en utilisant XMPP en PHP , et d'agir en tant que proxy pour le webgui.

Voir aussi: Google Techtalk sur la fonction de chat de Gmail (et problèmes d'évolutivité)

C'est mon 0,02 $

Tant qu'il n'y a pas la technologie push HTTP vous ne serez jamais un chat en temps réel en utilisant uniquement JavaScript.

workarrounds possibles:

  • utilisez un film Flash ou un Applet Java pour effectuer une communication socket
  • demandes de vote de maintien de retour sur le côté serveur pendant quelques secondes

Vous pouvez utiliser websockets, mais être une nouvelle fonctionnalité HTML5, il est un peu limité. Heureusement pour vous, il y a socksjs , qui met en œuvre websockets sur les navigateurs qui ne gèrent pas.

Du côté de l'hébergement, vous devriez être en mesure d'utiliser un serveur websockets, il y a quelques-uns pour PHP.

Si vous cherchez à mettre en place un serveur de chat écrit avec un langage de script tels que PHP / JSP, technique de la pendaison connexion HTTP devra être cochés de votre liste d'options. La raison est la plupart des Severs Web (hôtes) spécialement partagées n'aiment pas trop de connexions suspendues.

Vous trouverez tout ce dont vous avez besoin pour mettre en œuvre un client Web et le serveur de chat PHP dans cette "Protocole optimisé chat Server pour les langues serveur de script côté" publication.

La meilleure stratégie que j'ai vu est de faire une requête AJAX pour les messages, puis redémarrez la même demande exacte dès qu'elle se termine.

Du côté du serveur, faire pendant 60 secondes ou jusqu'à ce qu'un nouveau message est reçu le script « décrochage ». Cela permet de maintenir la même connexion ouverte pour un maximum de 60 secondes, mais quand un nouveau message est reçu, il émet et arrête immédiatement, ce qui incite l'AJAX côté client pour ouvrir une autre connexion.

Cette notification fournit presque instantanément de nouveaux messages et est également beaucoup plus facile sur le serveur que de faire une nouvelle connexion toutes les x secondes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top