2010-06-04 9 views
8

Je dois créer un chat comme le chat facebook.Comet VS Ajax sondage

Avec Comet j'ai besoin de plus de mémoire pour garder la connexion. Avec l'interrogation Ajax, il y a un problème de latence si j'envoie une requête toutes les 3-4 secondes.

Alors ... Si la latence (3-4 secondes) n'a pas d'importance, Ajax Polling est-il meilleur pour mon cas?

+1

Je pense que vous venez de répondre à votre propre question là-bas :) –

Répondre

1

Si la latence n'est pas un problème, AJAX est probablement meilleur. Comet peut rencontrer des problèmes pour maintenir plusieurs connexions entre la même paire client/serveur si vous n'êtes pas très, très prudent. (Ref)

6

La latence n'est pas le seul problème. COMET (interrogation longue) "enregistre" votre trafic - lorsque vous utilisez l'interrogation, vous ne pouvez pas savoir, s'il y a eu des changements sur le serveur, certains appels peuvent être une perte de trafic et de ressources (par exemple, même si personne n'est bavarder, vous faites des appels toutes les 3-4 secondes). Dans le cas de COMET, vous avez généralement besoin d'un seul appel pour obtenir une mise à jour du serveur (avec un taux de réussite de 100%).

+2

mais avec Comet, j'ai besoin de plus de mémoire pour garder les connexions ouvertes ... non? – xRobot

+1

Garder une connexion n'est pas si nuisible. La consommation de mémoire dépend davantage de l'API IO côté serveur que vous choisirez (blocage ou non). Si vous choisissez l'API de blocage, vous aurez un thread par connexion -> problèmes de mémoire avec 3-4k connexions ouvertes. Si vous choisissez une API non bloquante (presque toutes les applications ont des capacités NIO), vous pouvez conserver des millions de connexions ouvertes. –

+1

Vous pouvez trouver cela intéressant - http://iobound.com/2008/11/comet-nio/ –

2

@Vasil: "vous pouvez garder des millions de connexion ouverte"

Jetez un oeil to this problem

Et en ce qui concerne the false superiority de NIO sur IO. L'article d'iobound montre juste que IO surpasse NIO et que oui IO manque de mémoire avant NIO (d'ailleurs, l'auteur n'a pas essayé de réduire la mémoire de pile avec une valeur plus basse).