Bien sûr, je connais Ajax, mais le problème avec Ajax est que le navigateur doit fréquemment interroger le serveur pour savoir s'il existe de nouvelles données. Cela augmente la charge du serveur.
Existe-t-il une meilleure méthode (même en utilisant Ajax) autre que d'interroger fréquemment le serveur?
Réponses:
Oui, ce que vous recherchez, c'est COMET http://en.wikipedia.org/wiki/Comet_(programming) . Les autres bons termes de Google à rechercher sont AJAX-push et reverse-ajax.
la source
Oui, ça s'appelle Reverse Ajax ou Comet . Comet est essentiellement un terme générique désignant différentes façons d'ouvrir des requêtes HTTP de longue durée afin de transmettre des données en temps réel à un navigateur Web. Je recommanderais StreamHub Push Server , ils ont des démos intéressantes et il est beaucoup plus facile de démarrer que n'importe quel autre serveur. Consultez le tutoriel Getting Started with Comet et StreamHub de pour une introduction rapide. Vous pouvez utiliser l'édition communautaire qui est disponible en téléchargement gratuitement mais est limitée à 20 utilisateurs simultanés. La version commerciale en vaut la peine pour le support seul et vous obtenez des adaptateurs client SSL et Desktop .NET & Java. L'aide est disponible via le groupe Google, il y a un bon tas de tutoriels sur le net et il y a aussi un adaptateur GWT Comet .
la source
De nos jours, vous devez utiliser WebSockets. Il s'agit de la norme 2011 qui permet d'initier des connexions avec HTTP, puis de les mettre à niveau vers une communication bidirectionnelle basée sur les messages client-serveur.
Vous pouvez facilement lancer la connexion à partir de javascript:
La gestion du côté serveur dépend de votre pile de tenchnologie.
la source
Regardez dans Comet (une parodie sur le fait qu'Ajax est un agent de nettoyage et est donc Comet) qui est fondamentalement «Ajax inversé». Sachez que cela nécessite une connexion au serveur de longue durée pour que chaque utilisateur reçoive des notifications, alors soyez conscient des implications sur les performances lors de l'écriture de votre application.
http://en.wikipedia.org/wiki/Comet_(programming)
la source
Comet est définitivement ce que vous voulez. En fonction de vos exigences en matière de langue / cadre, différentes bibliothèques de serveurs sont disponibles. Par exemple, WebSync est un serveur comète intégré à IIS pour les développeurs ASP.NET/C#/IIS , et il existe également de nombreux autres serveurs autonomes si vous avez besoin d'une intégration plus étroite avec d'autres langues.
la source
Je suggérerais fortement d'investir du temps sur Comet, mais je ne connais pas d'implémentation ou de bibliothèque réelle que vous pourriez utiliser.
Pour une sorte de "panneau de contrôle du centre d'appels" d'une application Web qui impliquait la mise à jour de l'état de l'agent et de la file d'attente pour un centre d'appels en direct, nous avons développé une solution interne qui fonctionne, mais qui est loin d'une bibliothèque que vous pourriez utiliser.
Ce que nous avons fait, c'est de mettre en place un petit service sur le serveur qui communique avec le système téléphonique, attend de nouveaux événements et conserve une photo de la situation. Ce service fournit un petit serveur Web.
Nos clients Web se connectent via HTTP à ce serveur Web et demandent la dernière photo (codée en XML), l'affiche et recommence, demandant la nouvelle photo. À ce stade, le serveur Web peut:
De cette façon, lorsque les clients interrogent, ils obtiennent une réponse en 0 à 30 secondes maximum. Si un nouvel événement a déjà été généré, il l'obtient immédiatement), sinon il se bloque jusqu'à ce qu'un nouvel événement soit généré.
C'est essentiellement un sondage, mais c'est un sondage assez intelligent pour ne pas surchauffer le serveur Web. Si Comet n'est pas votre réponse, je suis sûr que cela pourrait être implémenté en utilisant la même idée mais en utilisant plus largement AJAX ou le codage en JSON pour de meilleurs résultats. Cela a été conçu à l'époque pré-AJAX, il y a donc beaucoup de place à l'amélioration.
Si quelqu'un peut fournir une implémentation légère et réelle, c'est parfait!
la source
Une alternative intéressante à Comet est d'utiliser des sockets dans Flash.
la source
Encore une autre façon, standard, est SSE (Server-Sent Events, également connu sous le nom EventSource , après l'objet JavaScript).
la source
Comet a en fait été inventé par Alex Russell de Dojo Toolkit ( http://www.dojotoolkit.org ). Voici un lien vers plus d'informations http://cometdproject.dojotoolkit.org/
la source
Il existe d'autres méthodes. Je ne sais pas s'ils sont «meilleurs» dans votre situation. Vous pouvez avoir une applet Java qui se connecte au serveur lors du chargement de la page et attend que des éléments soient envoyés par le serveur. Ce serait un peu plus lent au démarrage, mais permettrait au navigateur de recevoir des données du serveur de manière peu fréquente, sans interrogation.
la source
Vous pouvez utiliser une application Flash / Flex sur le client avec BlazeDS ou LiveCycle côté serveur. Les données peuvent être transmises au client à l'aide d'une connexion RTMP. Sachez que RTMP utilise un port non standard. Mais vous pouvez facilement revenir à l'interrogation si le port est bloqué.
la source
Il est possible d'atteindre ce que vous visez grâce à l'utilisation de connexions http persistantes.
Consultez l' article de Comet sur wikipedia, c'est un bon point de départ.
Vous ne fournissez pas beaucoup d'informations, mais si vous cherchez à créer une sorte de site événementiel (a'la digg spy) ou quelque chose du genre, vous envisagerez probablement d'implémenter un IFRAME caché qui se connecte à une url où la connexion ne se ferme jamais et vous allez ensuite pousser les balises de script du serveur vers le client afin d'effectuer les mises à jour.
la source
Cela vaut peut-être la peine de consulter Meteor Server, un serveur Web conçu pour COMET. Belle démo et elle est également utilisée par twitterfall .
la source
Une fois qu'une connexion est ouverte au serveur, elle peut rester ouverte et le serveur peut pousser le contenu il y a longtemps que je l'ai fait avec l'utilisation,
multipart/x-mixed-replace
mais cela n'a pas fonctionné dans IE.Je pense que vous pouvez faire des choses intelligentes avec le sondage qui le fait fonctionner plus comme push en n'envoyant pas les en-têtes de contenu inchangés mais en laissant la connexion ouverte, mais je n'ai jamais fait cela.
la source
Vous pouvez essayer notre composant Comet - bien qu'il soit extrêmement expérimental ...!
la source
veuillez consulter cette bibliothèque https://github.com/SignalR/SignalR pour savoir comment pousser les données vers les clients de manière dynamique au fur et à mesure qu'elles deviennent disponibles
la source
Vous pouvez également consulter les Pushlets Java si vous utilisez des pages jsp.
la source
Pourrait vouloir regarder ReverseHTTP aussi.
la source