2010-06-03 5 views
2

Cela concerne spécifiquement RequestBuilder de GWT, mais devrait également s'appliquer à XHR général. Mon entreprise me demande de créer une application de chat en temps quasi réel via HTTP. Oui, je me rends compte qu'il existe de meilleures façons de faire des applications de chat, mais c'est ce qu'ils veulent. Finalement, nous voulons qu'il fonctionne sur l'iPad/iPhone ainsi, le flash est sorti, ce qui exclut les websockets et la comète, je pense?Délais d'attente RequestBuilder et limites de connexion du navigateur par domaine

De toute façon, je rencontre des problèmes si j'ai défini le délai d'attente RequestBuilder de GWT à 10 secondes et que nous avons des délais d'attente très aléatoires et sporadiques. Nous avons la gestion des erreurs et l'envoi de courriels du côté serveur et nous n'obtenons jamais d'erreurs, ce qui suggère que la requête XHR sous-jacente sur laquelle repose RequestBuilder ne parvient jamais au serveur et expire après 10 secondes.

Nous utilisons ces requêtes pour interroger le serveur à la recherche de nouveaux messages assez souvent et aussi pour envoyer de nouveaux messages au serveur et aussi interroger (moins fréquemment) pour d'autres parties de l'application. Ce que je crains, c'est que nous courons dans la limite des navigateurs sur les connexions simultanées au même domaine (2 pour IE par défaut?). Maintenant, ma question est - Si je construis un RequestBuilder et appelle sa méthode send() et que le navigateur bloque l'envoi jusqu'à ce que l'une des 2 connexions par domaine soit libre, le timeout commence-t-il quand la requête est bloquée ou ne commencera-t-il pas tant que le navigateur n'aura pas libéré le XHR sous-jacent?

J'espère que c'est clair, si ce n'est pas s'il vous plaît faites le moi savoir et je vais essayer d'expliquer plus.

Répondre

1

Les navigateurs ne permettaient que 2 connexions par nom d'hôte; cela a maintenant changé. Les navigateurs «modernes» permettent jusqu'à 6 connexions simultanées - cela varie selon les navigateurs. Voir http://www.browserscope.org/ - onglet réseau. En ce qui concerne la minuterie, il commence avant que GWT invoque xhr.send(), donc votre soupçon est juste. Voir Request.java et RequestBuilder.java si vous voulez le tracer.

+0

J'ai choisi celui-ci comme réponse car on répond à ce que je demandais spécifiquement et j'ai ajouté des informations supplémentaires sur la façon de tracer la fonctionnalité et de voir comment cela fonctionne aussi sur différents navigateurs. Merci! – WesleyJohnson

0

Semble que la moitié du temps, vous répondez à votre propre question dès que vous postez.

Via: http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/http/client/package-summary.html

demande en attente limite - les navigateurs web modernes sont limités à avoir deux requêtes HTTP en cours à tout moment. Si votre serveur rencontre une erreur qui l'empêche d'envoyer une réponse, il peut bloquer vos demandes en attente. Si cela vous inquiète, vous pouvez toujours définir des délais d'attente pour la demande via RequestBuilder.setTimeoutMillis (int).

2

Sur la page doc de l'incubateur GWT est un article expliquant server push. Avec cette technique, vous ne maintenez qu'une connexion ouverte tout le temps.

+0

Et il ya une question à ce sujet sur SO aussi;) http://stackoverflow.com/questions/2391203/what-does-it-call-in-gwt-to-make-2-ui-consistent –

+0

+1 pour l'offre quelques solutions de rechange, cependant nous avons parlé de faire pousser ou de longs sondages et le patron ne veut pas encore descendre cette route. Je m'en doute cependant, si nous ne pouvons pas augmenter la performance et la stabilité de ce que nous faisons maintenant. – WesleyJohnson