Comment puis-je créer un serveur de chat qui n'est pas piloté par une interrogation?
-
19-09-2019 - |
Question
J'ai créé un simple serveur de chat qui est piloté par une interrogation client. Les clients envoient des demandes de données toutes les quelques secondes et se remis de nouveaux messages ainsi que des informations pour savoir si leur poste est toujours connecté.
Étant donné que le client est en cours d'exécution sur une plate-forme mobile (iPhone), je cherche des moyens de se débarrasser du scrutin, qui draine rapidement la batterie. J'ai lu qu'il est possible de maintenir une connexion HTTP ouverte indéfiniment, mais ne l'ai pas compris comment utiliser cette technique dans la pratique. Je me demande aussi si ces connexions sont suffisamment stables pour utiliser dans un cadre mobile.
Le scénario idéal serait que le serveur envoie uniquement des données aux clients lorsqu'un événement qui les touche a eu lieu (comme un pair affichant un message ou d'aller hors ligne).
Est-il conseillé d'essayer d'accomplir ce sur http, ou si je dois écrire mon propre protocole sur tcp? Comment serait-il difficile de personnaliser XMPP à mes besoins (mon serveur de chat a quelques fonctionnalités spécialisées que j'aurais à mettre en œuvre facilement).
La solution
Que diriez-vous de la technologie push? voir http://en.wikipedia.org/wiki/Comet_(programming)
Autres conseils
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. Il a bien fonctionné pour moi.
Vous pouvez vous consulter ce projet qui utilise une variété de techniques, y compris la comète. détails RELEASE sont ici , voici un extrait de cette page
Il est mon grand plaisir de pouvoir d'annoncer la première projection publique d'un projet que je travaille sur dans mon temps libre dans le dernier mois ou deux, un nouveau chat IRC Web Based application.
Ce projet rassemble beaucoup de les nouvelles technologies qui devaient être développé pour en faire un possible, évolutive et efficace.
Certains des outils sous-jacents à construire faire ce que je considère es posible sont déjà libérés « assez stable », tels que le php bibliothèque Socket Daemon je l'ai écrit pour être en mesure de traiter des centaines jusqu'à plusieurs milliers de les connexions http « Comet », et une égale quantité de connexions client IRC.
Je viens de découvrir cet 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 tenir la demande sur la file d'attente jusqu'à ce que il y a un message pousser. si la connexion TCP / IP est de perte ou de temps-out, le client faire une nouvelle requête HTTP, et le retard ne sera le temps de voyage aller-retour pour une demande / paire de réponse. . . ce modèle exige effectivement deux TCP / IP connexions pour HTTP, client serveur, bien qu'aucun permanent et par conséquent, mobile convivial
Je pense que cela est presque impossible et dangereux. Internet fonctionne sens sans état et sans connexion que la connexion entre le client et le serveur est toujours traité comme peu fiable. Et ce n'est pas pour le plaisir.
En essayant d'obtenir une connexion stateful vous introduisez de nouvelles questions. En particulier, à partir d'une application 3g. Que faire si les pauses de connexion? Vous avez aucun contrôle sur le serveur et ne peut pas pousser.
Je pense qu'il serait même plus facile d'envoyer des messages SMS / texte et ont une application qui gère cela.