2009-09-16 6 views
1

Je cherchais un moyen plus simple que Comet ou Long-Polling pour envoyer des mises à jour ajax très basiques au navigateur. Dans mes recherches, j'ai vu que les gens utilisent des minuteurs Javascript pour envoyer des appels Ajax à intervalles réguliers. Est-ce une mauvaise approche? Cela semble presque trop facile. Considérez également que les mises à jour que je vais envoyer ne sont pas des données critiques, mais qu'elles surveillent un processus qui peut durer plusieurs heures. Par exemple - Est-il fiable d'utiliser cette conception pour envoyer un appel ajax toutes les 10 secondes pendant 3 heures?Compteurs Javascript & Ajax polling/scheduling

Merci, Brian

Répondre

3

En général, en utilisant des minuteries pour mettre à jour le contenu sur une page via Ajax est au moins aussi robuste que reposant sur une connexion de flux de longue durée comme la comète. Les pare-feu, les baux DHCP courts, etc., peuvent tous interrompre une connexion persistante, mais l'interrogation rétablira une connexion client à chaque requête. Le compromis est que l'interrogation nécessite souvent plus de ressources sur le serveur. Même une poignée de clients interrogeant les mises à jour toutes les 10 secondes peut charger beaucoup plus votre serveur que les utilisateurs interactifs normaux, qui sont plus susceptibles de charger de nouvelles pages seulement quelques minutes, et passeront moins de temps à le faire avant de passer à un autre site . Comme un point de données, une simple application de jouets Sinatra/Ajax que j'ai écrite l'année dernière avait 3-5 visiteurs uniques par jour aux pages normales de «texte», mais son URL de rappel Ajax est rapidement devenue la portion la plus demandée de n'importe quel site sur le serveur , y compris plusieurs sites avec un ordre de grandeur (ou plus) de trafic plus élevé. Une manière de minimiser la charge due à l'interrogation consiste à séparer le code du serveur de rappel Ajax du code de site général, si cela est possible, et à l'exécuter dans son propre processus de serveur d'applications. Ce service de «middleware de service» peut gérer les rappels d'interrogation, plutôt que d'abandonner un thread de serveur/un écouteur Apache/etc. pour ce qui revient effectivement à une question de "sommes-nous encore là?"

Bien sûr, si vous prévoyez seulement d'avoir un petit nombre (disons de moins de 10) utilisateurs utilisant le service de sondage à la fois, allez-y et commencez à l'exécuter dans le même processus serveur.

+0

Merci. Je dois absolument planifier pour plus de 10 utilisateurs. Des recommandations pour commencer à apprendre à configurer un nouveau processus de serveur d'applications? – Brian

+0

Il ne fait que déployer une autre instance de votre pile d'applications.Si vous utilisez PHP sur Apache, par exemple, disposez d'un docroot distinct pour un hôte virtuel qui ne sert que les requêtes Ajax et ne charge pas le reste du code de votre application. Pour les applications Java, disposez d'une servlet autonome pour gérer uniquement les rappels. Etc., etc. Minimisez l'empreinte de votre gestionnaire Ajax, et vous pouvez étirer vos ressources serveur beaucoup plus loin. – rcoder

+0

Oh, je suis allé - merci beaucoup, très utile. – Brian

0

Je pense qu'une chose qui pourrait être utile ici est que l'interrogation à un intervalle immuable est simple, mais est souvent inutile ou indésirable.

Une méthode que j'ai expérimentée récemment est d'avoir des commentaires positifs et négatifs sur le sondage. Essentiellement, une mise à jour est soit active (les changements se sont produits) ou passive (aucune modification plus récente n'était disponible, donc aucune n'était nécessaire). Les mises à jour qui sont passives augmentent l'intervalle d'interrogation. Les mises à jour actives définissent l'intervalle d'interrogation sur la valeur de référence. Par exemple, sur ce chat sur lequel je travaille, différents utilisateurs postent des messages. Par exemple, L'intervalle d'interrogation commence à la valeur haute de 5 secondes. Si d'autres utilisateurs du site discutent, vous êtes mis à jour toutes les 5 secondes à ce sujet. Si l'activité ralentit et que personne ne discute depuis que le dernier message a été affiché, l'intervalle d'interrogation devient de plus en plus lent d'environ une seconde à chaque fois, finissant par plafonner toutes les 3 minutes. Si, une heure plus tard, quelqu'un envoie à nouveau un message de discussion, l'intervalle d'interrogation revient soudainement à 5 secondes et commence à ralentir.

Haute activité -> interrogation fréquente. Faible activité -> éventuellement un sondage très peu fréquent.

Questions connexes