Question

Bien sûr, je connais Ajax, mais le problème avec Ajax est que le navigateur doit interroger fréquemment le serveur pour savoir s'il y a 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 ?

Était-ce utile?

La solution

Oui, ce que vous recherchez, c'est COMET http://en.wikipedia.org/wiki/Comet_(programmation).D'autres bons termes Google à rechercher sont AJAX-push et reverse-ajax.

Autres conseils

Oui, ça s'appelle Ajax inversé ou Comète.Comet est essentiellement un terme générique désignant différentes manières 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 Serveur push StreamHub, ils ont des démos sympas et c'est beaucoup plus facile de démarrer avec que n'importe lequel des autres serveurs.Vérifiez Tutoriel Premiers pas avec Comet et StreamHub 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 seul support et vous obtenez des adaptateurs client SSL et Desktop .NET & Java.L'aide est disponible via le Groupe Google, il y a pas mal de tutos sur le net et il y a un Adaptateur GWT Comet aussi.

De nos jours, vous devriez utiliser WebSockets.Il s'agit d'une norme de 2011 qui permet d'initier des connexions avec HTTP, puis de les mettre à niveau vers une communication bidirectionnelle client-serveur basée sur les messages.

Vous pouvez facilement initier la connexion depuis javascript :

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

La gestion côté serveur dépend de votre pile technologique.

Regardez la comète (une parodie sur le fait que l'Ajax est un agent de nettoyage, tout comme la comète) qui est essentiellement "inversé Ajax". Sachez que cela nécessite une connexion de serveur à longue durée de vie pour que chaque utilisateur reçoive des notifications, alors soyez conscient des implications de performances lors de la rédaction de votre application.

http://en.wikipedia.org/wiki/Comet_(programmation)

Comet est définitivement ce que vous voulez.En fonction des exigences de votre langage/framework, différentes bibliothèques de serveurs sont disponibles.Par exemple, WebSync est un serveur Comet 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 langages.

Je suggère 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 de centre d'appels" d'une application Web impliquant la mise à jour de l'état de l'agent et de la file d'attente d'appels pour un centre d'appels en direct, nous avons développé une solution interne qui fonctionne, mais qui est loin d'être une bibliothèque que vous pourriez utiliser.

Ce que nous avons fait, c'est implémenter un petit service sur le serveur qui communique avec le système téléphonique, attend de nouveaux événements et conserve une photographie 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'affichent puis repartent en demandant la nouvelle photo.Le serveur Web peut à ce stade :

  • Renvoyez la nouvelle photo, s'il y en a une
  • Bloquez le client pendant quelques secondes (30 dans notre configuration) en attendant qu'un événement se produise et changez la photo.Si aucun événement n'a été généré à ce stade, il renvoie la même photo, uniquement pour permettre à la connexion de rester active et de ne pas expirer le client.

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 bloque jusqu'à ce qu'un nouvel événement soit généré.

Il s'agit essentiellement d'un sondage, mais il s'agit d'un sondage quelque peu 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 en codant en JSON pour de meilleurs résultats.Ceci a été conçu avant l’ère 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 de cela, tant mieux !

Une alternative intéressante à Comet consiste à utiliser des sockets en Flash.

Une autre méthode, standard, est SSE (Événements envoyés par le serveur, également appelés EventSource, après l'objet JavaScript).

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/

Il existe d'autres méthodes.Je ne sais pas s'ils sont « meilleurs » dans votre situation.Vous pourriez avoir une applet Java qui se connecte au serveur lors du chargement de la page et attend que les é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.

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é.

Il est possible d'atteindre votre objectif grâce à l'utilisation de connexions http persistantes.

Vérifiez Article sur la comète sur Wikipédia, c'est un bon point de départ.

Vous ne fournissez pas beaucoup d'informations, mais si vous envisagez de créer une sorte de site événementiel (un espion à la Digg) 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, puis vous enverrez des balises de script du serveur au client afin d'effectuer les mises à jour.

Cela vaut peut-être la peine d'être vérifié Serveur Météore qui est un serveur web conçu pour COMET.Bon démo et il est également utilisé par twitterfall.

Une fois qu'une connexion est ouverte au serveur, elle peut rester ouverte et le serveur peut envoyer du contenu il y a longtemps, je l'ai fait en utilisant multipart/x-mixed-replace mais cela n'a pas fonctionné sous IE.

Je pense que vous pouvez faire des choses intelligentes avec l'interrogation qui le font fonctionner davantage comme du push en n'envoyant pas d'en-têtes de contenu inchangé mais en laissant la connexion ouverte, mais je ne l'ai jamais fait.

Vous pourriez essayer notre Composant comète - même si c'est extrêmement expérimental...!

s'il vous plaît vérifier cette bibliothèque https://github.com/SignalR/SignalR savoir comment transmettre dynamiquement les données aux clients dès qu'elles deviennent disponibles

Vous pouvez également consulter Pushlets Java si vous utilisez des pages jsp.

Je voudrais peut-être regarder HTTP inversé aussi.

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