Apache HttpClient Mehrere Abrufverbindungen zur Serverstrategie

8

Ich richte einen Java-Client für einen Server ein, den ich regelmäßig abrufe und auf dem basierend auf bestimmten Antworten Nachrichten senden. Die Strategie, die ich für die Klasse verwendet habe, ist wie folgt:

%Vor%

Ich starte einen Thread, der das Polling ungefähr 3 Sekunden lang ausführt. Ich kann die Nachrichten vom Hauptthread basierend auf den Umfrageergebnissen senden. Der Code funktioniert, gibt mir aber weiterhin die folgenden zwei Ausnahmen, arbeitet aber dazwischen weiter.

%Vor%

Ich könnte die Ausnahmen einfach stummschalten, aber ich möchte wissen, was vor sich geht. Ich konnte keine Lösungen über Google finden. Ich habe versucht, Inhalt zu konsumieren, ein neues HttpPost -Objekt in der send-Methode zu erstellen, so etwas, aber nichts hat bisher geholfen.

Was ist eine gute Strategie für eine Situation wie diese? Ich setze derzeit den Header keep-alive im Objekt HttpPost , falls das wichtig ist. Ansonsten glaube ich nicht, dass ich irgendetwas mache. Ich denke, das hat mit der Strategie insgesamt zu tun. Ich möchte nicht für jede Verbindung ein neues Objekt erstellen, aber ich weiß auch nicht, welche Stufe der Wiederverwendung empfohlen wird. Danke für jede Hilfe. Oh .. und das ist HttpClient 4.2.2

    
Saad Farooq 16.11.2012, 21:53
quelle

4 Antworten

1

@ Saads Antwort war sehr hilfreich, aber ich habe Verzögerungen erlebt, als ich versuchte, eine einzelne URL mit vielen gleichzeitigen Anfragen zu laden.

Hier ist eine aktualisierte Version, die das Problem behoben hat.

%Vor%     
Vadzim 08.04.2014, 09:53
quelle
1

Ich habe den folgenden Code verwendet. Es funktioniert ... habe keine Ahnung warum.

%Vor%     
Saad Farooq 20.12.2012 12:28
quelle
0

Diese Methoden sind nicht synchronisiert und Sie rufen von verschiedenen Threads aus. Ist es möglich, dass Ihr Code versucht, send () aufzurufen, während eine poll () -Operation läuft? Ich stelle mir vor, HttpClient wird es nicht mögen, wenn Sie versuchen, zwei Anfragen zur gleichen Zeit mit dem gleichen Objekt zu machen.

(Wenn dies das Problem ist, wäre ein trivialer Fix, das synchronisierte Schlüsselwort zu beiden Methoden hinzuzufügen, vorausgesetzt, Sie haben nichts dagegen, die Threads zu blockieren, die sie aufrufen.)

    
sam 20.12.2012 01:13
quelle
0

Dies könnte zu viel Aufwand sein, aber Sie könnten einen Thread für die HTTP-Verbindungsübergabe in Erwägung ziehen. Dieser Thread würde den Schlaf so lange verbringen, bis er abstimmen oder ein Signal senden kann. Der Vorteil hierbei ist, dass nur eine Verbindung jemals benutzt wird.

    
seand 20.12.2012 04:48
quelle

Tags und Links