2010-11-08 4 views
7

J'utilise XMLReader pour lire simplement un flux comme ci-dessous."Timeout lors de l'extraction" URLFetch GAE/J

URLConnection urlConnection = url.openConnection(); 
XmlReader reader = new XmlReader(urlConnection); 

Quand on appelle cela que je reçois dans les 5 secondes un IOException « Délai d'attente lors de l'extraction ». J'ai donc essayé de régler les délais d'attente au maximum. (10 sec) mais toujours pas de chance et toujours une IOException en 5 sec.

urlConnection.setConnectTimeout(10000); 

(le max est indiqué dans la documentation: http://code.google.com/intl/nl-NL/appengine/docs/java/urlfetch/overview.html)

semble bien que la de la charge est trop importante. Lorsque j'appelle un flux plus petit il fonctionne correctement. Y at-il une solution de contournement ou une solution pour cela? Je dois pouvoir appeler des flux plus importants.

Répondre

10

Vous devez utiliser la méthode setReadTimeout qui fixe la date limite de lecture:

urlConnection.setReadTimeout(10000); //10 Sec 

Vous devriez être en mesure de télécharger les flux plus importants en 10 secondes.
Si vous avez toujours un problème, essayez de bidouiller avec this approche différente.

+1

Merci pour la réponse rapide. Je l'ai essayé, malheureusement toujours la même exception. Il semble qu'il n'y ait aucune réponse dans les 5 secondes. –

+1

@Ben semble étrange pour moi; combien de secondes faut-il pour obtenir ce flux via un navigateur par exemple? – systempuntoout

+0

Cela prend environ 10 sec. dans le navigateur (FireFox/Chrome/IE) –

0

La raison en est:

Si aucune donnée est disponible pour la période d'attente de lecture, peut être jeté exception. De the doc of Oracle

Un SocketTimeoutException peut être jeté lors de la lecture du flux d'entrée retourné si le délai d'attente de lecture expire avant que les données sont disponibles pour la lecture.

Par ailleurs, ReadTimeout est différent avec ConnectTimeout, le délai d'attente de lecture est le délai d'attente pour obtenir des données de l'hôte, voir different connection timeout and read timeout

Alors que @systempuntoout réponse, besoin de spécifier le délai lu.