2009-07-23 2 views
4

J'ai créé un serveur de discussion simple qui est piloté par l'interrogation du client. Les clients envoient des requêtes de données toutes les quelques secondes et reçoivent les nouveaux messages ainsi que des informations indiquant si leur homologue est toujours connecté.Comment créer un serveur de discussion qui n'est pas piloté par interrogation?

Depuis que le client fonctionne sur une plate-forme mobile (iPhone), j'ai cherché des moyens de se débarrasser de l'interrogation, qui draine rapidement la batterie. J'ai lu qu'il est possible de garder une connexion HTTP ouverte indéfiniment, mais je n'ai pas compris comment utiliser cette technique dans la pratique. Je me demande aussi si ces connexions sont assez stables pour être utilisées dans un environnement mobile.

Le scénario idéal serait que le serveur envoie uniquement des données aux clients lorsqu'un événement les affectant s'est produit (par exemple, un homologue postant un message ou sortant de la ligne).

Est-il conseillé d'essayer d'accomplir ceci sur http, ou devrais-je écrire mon propre protocole sur TCP? Comment serait-il difficile de personnaliser xmpp à mon besoin (mon serveur de chat a quelques fonctionnalités spécialisées que je devrais mettre en œuvre facilement).

Répondre

4

Que diriez-vous de la technologie push? voir http://en.wikipedia.org/wiki/Comet_(programming)

+2

http://stackoverflow.com/questions/337985/comet-server-push-to-client-on-iphone –

+0

Oui, c'est ce que j'avais à l'esprit, et la discussion à laquelle Russell L est lié est très utile aussi . Merci à tous les deux. – Felixyz

1

Je viens de découvrir this article moi-même, qui décrit la technique suivante (dont je parlais dans la question):

... que le client fait une requête HTTP et que le serveur détient la demande sur la file d'attente jusqu'à ce qu'il y ait un message à pousser. Si la connexion TCP/IP est perdue ou expirée, le client effectuera une nouvelle demande HTTP et le délai ne sera le temps d'aller-retour que pour une paire requête/réponse . . . ce modèle exige effectivement deux TCP/IP pour les connexions HTTP, client serveur, bien qu'aucun amical permanent et donc mobile

1

Vous voudrez peut-être vérifier this project qui utilise une variété de techniques, y compris Comet. Release details are here, voici un extrait de cette page

C'est mon grand plaisir de pouvoir d'annoncer le premier partenariat public montrant d'un projet que je travaille sur dans mon temps libre dans le dernier mois ou deux, une nouvelle application basée sur le Web IRC chat .

Ce projet rassemble beaucoup de nouvelles technologies qui devait être développé pour en faire un possible, évolutive et efficace.

Certains des outils sous-jacents construire à faire ce es posible que je considère « assez stable » sont déjà libérés, comme le php Socket Daemon library je l'ai écrit pour être en mesure de traiter des centaines jusqu'à plusieurs milliers de « Comet "connexions http, et une quantité égale de connexions client IRC .Je pense que c'est presque impossible et dangereux.

0

Internet fonctionne sans état et sans connexion, ce qui signifie que la connexion entre le client et le serveur est toujours considérée comme non fiable. Et ce n'est pas amusant. En essayant d'obtenir une connexion avec état, vous introduisez de nouveaux problèmes. Surtout à partir d'une application 3g. Que faire si la connexion se casse? Vous n'avez aucun contrôle sur le serveur et ne pouvez pas pousser.

Je pense qu'il serait encore plus facile d'envoyer des sms/textos et avoir une application qui gère cela.

+0

Il semble que beaucoup de gens l'utilisent avec succès en utilisant des approches Cometish (BOSH etc). Si la connexion se casse ... vous en établissez une nouvelle? Serait intéressant d'entendre plus sur pourquoi vous pensez que c'est presque impossible. – Felixyz

3

Je pense que vous décrivez XMPP sur BOSH.

http://xmpp.org/extensions/xep-0206.html

Je l'ai utilisé cette méthode de liaison HTTP entre un serveur de chat et javascript client sur les appareils non mobiles. Ça a bien marché pour moi.

Questions connexes