2009-10-29 10 views
1

Je fais une demande http qui finit par prendre plus de 8 minutes. Pour moi, cette demande de longue durée fonctionne bien. Je suis en mesure d'obtenir une réponse à mon navigateur sans aucun problème. (Je suis situé sur le même réseau que le serveur).connexion http longue durée ne reçoit jamais de réponse

Cependant, pour certains utilisateurs, le navigateur ne renvoie aucune réponse. (Remarque: Lorsque la même requête http s'exécute en 1 minute, ces utilisateurs peuvent voir la réponse sans problème)

Ces utilisateurs se trouvent sur un autre réseau. Et il y a probablement un pare-feu ou deux entre leur emplacement et le serveur.

Je peux voir sur leur violoniste que la demande est juste là en attente d'une réponse.

Je suis maintenant en supposant que le pare-feu est en train de tuer la connexion http inactif .. mais je ne suis pas sûr.

Si vous avez une idée pourquoi la réponse ne revient jamais, ou pourquoi la connexion ne se brise jamais .. ce sera très utile.

Également: Est-il possible de résoudre ce problème en écrivant une applet qui réussit à conserver le signal factice envoyé au serveur, même après avoir envoyé (vidé) la requête au serveur?

Répondre

1

Les utilisateurs peuvent se trouver derrière un pare-feu de suivi de connexion/passerelle NAT. De telles passerelles ont tendance à laisser tomber la connexion TCP quand rien ne s'est passé pendant un certain temps. Dans un protocole personnalisé, vous pouvez envoyer des messages de pulsation pour maintenir la connexion TCP active, mais avec HTTP vous n'avez pas le contrôle approprié sur cette connexion, et HTTP ne facilite pas ce qui est nécessaire pour maintenir une connexion tcp "active". La façon habituelle de gérer les tâches longues lancées par une requête HTTP consiste à déclencher ce travail en arrière-plan, en envoyant immédiatement une réponse correcte au client et en demandant à une requête applet/ajax d'interroger l'état de ce travail et renvoyer le résultat quand c'est fait.

Si vous avez besoin d'une solution rapide, vérifiez si vous pouvez contrôler les délais d'attente sur les passerelles entre le serveur et l'utilisateur.

+0

Dans mon dernier commentaire, j'ai mentionné que les utilisateurs pouvaient exécuter des requêtes de longue durée sur un serveur IIS. Donc, même si la plupart des doigts pointent vers le pare-feu ... J'ai du mal à arriver à cette conclusion. btw, Le serveur sur lequel les demandes échouent est linux + weblogic/websphere. – rjk2008

+0

marquant ce commentaire comme la réponse, mais pour être honnête, je ne suis pas près de résoudre le problème. Mettra à jour ici si nous trouvons un moyen de faire un long processus de synchronisation "sans" en utilisant un nouvel outil (icefaces, comète, etc) sur le côté serveur. Le sondage ne semble pas plus attrayant qu'asynch en ce moment. – rjk2008

+0

Juste trouver un moyen de surveiller les paquets sur chaque jambe du pare-feu avec Ethereal. et voyez si les paquets s'arrêtent n'importe où.Apache a la directive Timeout simple qui a une valeur par défaut de 300 secondes, qui contrôle entre autres le délai d'expiration d'une réponse. Websphere semble avoir une configuration de configuration de délai d'attente, je ne peux pas déterminer lequel vous devez ajuster - mais il y a des chances qu'il y ait un réglage que vous pourriez devoir ajuster - peut-être ConnectionResponseTimeout – nos

0

Avez-vous considéré que les utilisateurs utilisaient un navigateur qui a un délai d'attente HTTP qui empêche le navigateur d'attendre une réponse après un certain temps?

+0

Le problème est que les utilisateurs ont pu courir de longues demandes allant à aa Windows serveur IIS ... Donc, Je ne pense pas que ce soit lié au navigateur. – rjk2008

Questions connexes