2010-12-06 58 views

Répondre

8

Vous semblez avoir un problème avec la charge du serveur, donc je vais comparer les technologies pertinentes.

Ajax interrogation: Ceci est le plus simple. Vous faites une boucle setTimeout toutes les 5 secondes environ pour vérifier les nouveaux messages de chat ou pour définir un iframe à recharger. Lorsque vous postez un message, vous retournez également de nouveaux messages, et les choses ne devraient pas se dérégler. Le plus grand inconvénient de cette méthode est qu'il est peu probable que vous interrogiez avec une fréquence correspondant à la fréquence de publication des messages. Soit vous allez interroger trop rapidement, et vous ferez beaucoup de demandes supplémentaires, soit vous sonderez trop lentement et vous obtiendrez des blocs de messages à la fois au lieu de les obtenir en temps réel. C'est de loin la méthode la plus simple.

HTTP push Telle est l'idée que le serveur doit dire au client quand il y a de nouveaux messages, plutôt que le client tracasse sans cesse le serveur demandant s'il y a des nouvelles encore les. Imaginez le parent qui conduit et le gamin qui demande: «Sommes-nous encore là?», Vous pouvez simplement demander aux parents de dire à l'enfant quand ils arrivent.

Il y a plusieurs façons de simuler ceci et de le faire pour de vrai. Les WebSockets, que vous avez mentionnés, créent en fait un flux entre le client et le serveur et envoient des données en temps réel. C'est génial, et pour les 4 utilisateurs sur 10 qui ont un navigateur qui peut le faire, ils seront très excités.Tout le monde aura une page cassée. Pardon. Peut-être dans quelques années.

Vous pouvez également fausser la technologie push avec des choses comme à longue interrogation. L'idée est de demander au serveur s'il y a de nouveaux messages, et le serveur ne répond pas jusqu'à ce qu'un nouveau message apparaisse ou qu'une limite prédéfinie (30 secondes environ) ait été atteinte. Cela réduit au minimum le nombre de demandes, tout en utilisant des technologies Web connues, de sorte que la plupart des navigateurs fonctionneront avec. Vous aurez une simultanéité de connexion élevée, mais ils ne font rien, donc cela devrait avoir un coût de serveur trop élevé.

J'ai utilisé tout cela auparavant, mais j'ai fini par aller avec moi-même d'interrogation longue. Vous pouvez en savoir plus sur la façon de le faire ici: How do I implement basic "Long Polling"?

+1

http://caniuse.com/#search=websocket en 2015, les websockets sont supportées par tout sauf sauf ie8 et ie9. : RÉ – Kzqai

1

Il y a quelques façons qui donnent les messages au client immédiatement:

  • HTML5 Websockets
    • bien parce que vous pouvez les utiliser comme de véritables prises
    • mauvais parce que seulement quelques navigateurs soutiennent
  • cadre Endlessly chargement
    • bien parce que tous les navigateurs supporte
    • pas si cool parce que vous avez à faire des requêtes AJAX pour envoyer des trucs
    • vous pouvez envoyer des commandes au client en intégrant <script> balises dans le contenu
      • le script est exécuté immédiatement, aussi!
  • ...

Donc, en conclusion, je choisirais la deuxième manière.

+0

Pas sûr ce qui est AJAX, mais ce ne est pas difficile d'envoyer des messages au serveur en utilisant une forme régulière à l'intérieur d'un autre cadre. –

+0

@ user205376: Ajax est facile, aussi, mais un socket est plus cool :) – thejh

+0

Vous pouvez utiliser un repli Flash sur WebSocket pour obtenir une compatibilité beaucoup plus grande. Voir par exemple [celui de gimite] (https://github.com/gimite/web-socket-js). – bobince

1

L'approche typique consiste à utiliser long polling. Bien que mieux ne pas le faire en PHP (PHP aura besoin d'un processus pour chaque connexion, ce qui limite considérablement le nombre de visiteurs possibles sur votre site). Utilisez plutôt node.js. C'est parfait pour les chats.

2

Vous devriez choisir des sockets plutôt que AJAX Polling, Cependant, il n'y a pas grand-chose à propos de la façon dont vous pouvez intégrer des discussions basées sur socket avec MySQL.

Je l'ai fait quelques tests et un exemple de base de travail ici: https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

Il utilise Ratchet (http://socketo.me/) pour la création du serveur de chat en PHP.

Et vous pouvez envoyer des messages instantanés à la base de données en envoyant le serveur JSON avec les informations de qui discute, (si bien sûr vous avez des sessions utilisateur)