web-dev-qa-db-fra.com

Notification du client, devrais-je utiliser un AJAX push ou sondage?

Je travaille sur un service de notification simple qui sera utilisé pour diffuser des messages aux utilisateurs de surfer sur un site Web. Les notifications ne doivent pas être envoyées en temps réel, mais cela pourrait être une meilleure expérience utilisateur s'ils se sont produits plus fréquemment que de dire toutes les 5 minutes. Les données étant envoyées et à partir du client ne sont pas très grandes et constitue une requête de base de données directe pour récupérer les données.

En lisant d'autres conversations sur le sujet, il semblerait que an AJAX PUSH peut entraîner des charges de serveur plus élevées. Puisque je peux tolérer des retards de serveur plus longs, il vaut la peine d'avoir les notifications pushes de serveur ou simplement sondage.

Il n'est pas beaucoup plus difficile de mettre en œuvre le scénario push et j'ai donc pensé que je verrais que l'opinion était ici.

Merci de votre aide.

EDIT: J'ai examiné un simple AJAX Poussez et implémenté une simple démonstration basée sur celui-ci article par Mike Purvis. La charge du client est relativement faible à environ 5k pour le version initiale et devrait rester de cette façon pour un certain temps.


Merci à tous pour vos réponses. J'ai décidé d'y aller avec la solution de vote, mais de l'envelopper dans une bibliothèque utilitaire de sorte que s'ils veulent le changer plus tard, il est plus facile.

33
smaclell

Parce que l'utilisation d'une poussée nécessite une connexion HTTP ouverte pour être maintenue entre votre serveur et chaque client, j'irais également pour le sondage, non seulement est que cela va consommer beaucoup de ressources du serveur, mais cela va également être significativement plus difficile à Implémenter comme Matt B mentionné.

Mon expérience avec le sondage est que si vous avez un intervalle de vote assez fréquent sur un site assez occupé, vos journaux de serveur Web peuvent être inondés de demandes de sondage réel rapidement.

Modifier (2017): Je dirais que vos choix sont maintenant entre des swickets et un interrogation long (mentionné dans une autre réponse). On sonne comme un long interrogation pourrait être le bon choix basé sur la manière dont la question mentionne que les notifications n'ont pas besoin d'être reçues en temps réel, une période de vote peu fréquente serait assez facile à mettre en œuvre et ne devrait pas être très imposable sur votre serveur. . Les webockets sont cool et un excellent choix pour de nombreuses applications ces jours-ci, on dirait que cela pourrait être surchargé dans ce cas.

5
mmacaulay

Je suis surpris que personne ne soit mentionné à long terme. Long interrogation signifie garder une connexion ouverte pendant une période plus longue (selon 30 à 60 secondes), et une fois qu'il est fermé, redoublez-la à nouveau, et simplement avoir la prise/la connexion Écouter pour des réponses. Cela entraîne moins de connexions (mais plus longues) et signifie que les réponses sont presque immédiates (certaines devront-elles attendre une nouvelle connexion d'interrogation). J'aimerais ajouter qu'en combinaison avec des technologies telles que NODEJS, il en résulte une solution très efficace et de la lumière de ressources, qui correspond à 100% de navigateur compatible avec tous les grands navigateurs et toutes les versions et ne nécessite aucune technologie supplémentaire comme la comète ou Éclat.

Je me rends compte que c'est une vieille question, mais je pensais qu'il pourrait toujours être utile de fournir ces informations :)

12
Oddman

Utilisez définitivement que vous poussez beaucoup plus froid. Si vous voulez juste des notifications simples, j'utiliserais quelque chose comme StreamHub Push Server pour faire la levée pour vous. Développer votre propre fonctionnalité de poussée Ajax est une route extrêmement délicate et rocheuse - vous devez le faire fonctionner dans tous les navigateurs, puis gérer des pare-feu et des procurations à tuer des connexions à conservation, etc. Pourquoi réinventer la roue. En outre, il a une empreinte similaire inférieure à 10k, ce qui devrait donc être une priorité pour vous.

10
Supertux

Tous deux ont des exigences différentes et traitent des scénarios de différente.

Si vous avez besoin mises à jour en temps réel , comme dans une conversation en ligne, la poussée est un must.

Mais, si la période de rafraîchissement est grosse , comme dans votre cas (5 minutes), la solution est la solution appropriée. En l'espèce, dans ce cas nécessitera beaucoup de ressources du client et du serveur.

Astuce! Essayez de faire la page qui vérifie la piscine rapide et propre, il ne consomme donc pas beaucoup de ressources sur le serveur dans chaque demande. Ce que je fais habituellement est de garder un drapeau en mémoire (comme dans une variable de session) qui dit si la piscine est vide ou non ... Donc, je ne fais que regarder que Havy regarde dans la piscine uniquement si ce n'est pas vide. Lorsque la piscine est vide, la plupart du temps, la requête de la page est extrêmement rapide.

7
Daniel Silveira

Je voudrais mettre en œuvre un sondage simplement parce que cela semble plus simple à écrire et de garder simple est très précieux.

3
matt b

Je ne l'ai pas essayé moi-même, mais certains disent Comet fonctionne et est plus facile que vous ne le pensez . Il y a aussi un Ruby ON Rails Plug-in appelé Juggernaut que j'ai entendu parler fortement. t l'a utilisé, donc ymmv, mais ma compréhension est que cela prend beaucoup moins de ressources par rapport au scrutin. Je crois (quelqu'un peut-il confirmer?) Cette comète est comment macrumorslive.com Délivre des blogs en direct de la WWDC Stevenotes.

1
Andrew Hedges

Il est impossible de dire si le sondage sera plus coûteux puis poussant sans savoir combien de clients vous aurez. Je recommanderais de voter parce que:

  • On dirait que vous souhaitez mettre à jour des données une fois par minute. À moins que des notifications ne puissent arriver à un taux beaucoup plus rapide que cela, poussoir signifier que vous gardez une connexion HTTP ouverte, mais voyant très peu d'activité dessus.
  • Le sondage est construit sur les conventions HTTP existantes, de sorte que tout serveur qui parle aux navigateurs Web est déjà prêt à répondre aux demandes Ajax ordinaires. Une solution à base de socket comète ou flash a des exigences différentes; Vous aurez besoin de quelque chose comme cometd sur le côté serveur et une bibliothèque latérale client qui groks Server-Side-Side-Side.

Donc, si vous aviez besoin de quelque chose de poids lourd pour gérer un torrent de données et une charge de crise de clients, je recommanderais la comète. Mais cela ne semble pas être le cas.

1
savetheclocktower

Je ne sais pas si vous avez examiné une partie des implémentations de la comète (est-ce ce que vous voulez dire par AJAX PUSH).

Si l'utilisateur navigue sur le site, cela n'aura plus qu'en effet demander des informations sur le serveur que cette notification peut surveiller?

1
Lou Franco