2010-03-20 9 views
14

Avec l'aide de HttpWatch, j'ai essayé de comprendre comment GMail implémente Comet.Comment GMail implémente-t-il Comet?

Je me connecte à GMail avec deux comptes, un dans IE et l'autre dans Firefox. Discuter dans GTalk dans GMail avec quelques mots magiques comme "WASSUP". Ensuite, je déconnecte les deux comptes GMail, filtre tout contenu http sans chaîne "WASSUP". Le résultat montre quelle requête HTTP est le canal de diffusion. (Note: je dois me déconnecter, sinon le HTTP interminable n'afficherait pas le contenu dans HttpWatch.)

Le résultat est intéressant. L'URL pour le canal de flux est comme:

https://mail/channel/bind?VER=8&at=xn3j33vcvk39lkfq .....

Il n'y a pas surprenant que GMail faire la comète dans IE avec IFRAME. Le contenu Http commence par "<html><body>". À l'origine, je devinais que GMail fait Comet dans Firefox avec XmlHttpRequest en plusieurs parties. À ma grande surprise, l'en-tête de réponse n'a pas d'en-tête «multipart/x-mixed-replace». Les en-têtes de réponse sont les suivantes:

HTTP/1.1 200 OK 
Content-Type: text/plain; charset=utf-8 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Date: Sat, 20 Mar 2010 01:52:39 GMT 
X-Frame-Options: ALLOWALL 
Transfer-Encoding: chunked 
X-Content-Type-Options: nosniff 
Server: GSE 
X-XSS-Protection: 0 

Malheureusement, le HttpWatch ne dit pas si une requête HTTP est de XMLHttpRequest ou non. Le contenu n'est pas HTML mais JSON. Il ressemble à une réponse pour XHR, mais cela ne fonctionnerait pas pour Comet sans multipart/x-mixed-replace, non?

Existe-t-il d'autres façons de comprendre comment GMail implémente Comet?

Mise à jour: Après une enquête plus poussée, je crois que GMail implémente Comet ainsi: 1) dans Internet Explorer, il utilise une iframe cachée pour toujours; 2) dans Firefox, il utilise forever-XHR sans en-tête multipart/x-mixed-replace. Le client va répondre en condition (readyState == 3) OU (readyState == 4). C'est-à-dire à la fois dans un état interactif et dans un état complet.

Répondre

15

par this article,

Alors, quelle est la solution utilisée par Google Gmail? La solution est vraiment simple, simple et très portable! Ce que Gmail a fait, c'est demander une page html sans fin qui contient flux de portions Javascript. Donner un essai, c'est très puissant. Donc, nous aura sur le côté client un fichier js qui traite les réponses, et un autre code HTML sans fin qui contient les flux Javascript .

Le reste de l'article va dans beaucoup plus de détails, y compris une exploration des alternatives ainsi que celui spécifique choisi par GMail.

+0

C'est un bon article. Mais, cela n'explique toujours pas pourquoi GMail a choisi JSON comme réponse dans Firefox. –

+0

@Morgan, JSON est une façon agréable d'empaqueter des données, en particulier mais pas exclusivement pour l'utilisation de Javascript - cfr http://ajaxian.com/archives/json-vs-xml-the-debate et (esp.) Les nombreux liens de là. Avec le codage par transfert en bloc, cela fonctionne bien ... au moins dans les navigateurs décemment conformes à la norme ;-). –

+0

Salut, essayé waybackmachine pour l'article parce que l'article est en panne. Pouvez-vous livrer un autre lien? Merci!! – loveNoHate