In hohem Maße gleichzeitiges HTTP mit Netty und NIO

8

Ich arbeite an dem Beispiel Netty HTTP-Client-Code , um HTTP-Anfragen in einer parallelen Umgebung mit Threads zu erstellen.

Allerdings bricht mein System bei einigen wenigen Ausnahmen vollständig ab.

In fast Pseudocode:

%Vor%

Im Beispiel, um eine Anfrage zu machen, erstelle ich einen ClientBootstrap, und von dort (durch ein paar Reifen) einen Kanal, um den HTTPRequest zu schreiben.

Das alles funktioniert und ist gut.

Sollte jedoch in einer gleichzeitigen Situation jede Anfrage die gleichen Reifen durchlaufen? Ich denke, das ist es, was im Moment für mich bricht. Soll ich die Verbindung wiederverwenden oder meinen Klienten ganz anders strukturieren?

Auch: Ich mache das in Clojure, wenn das überhaupt einen Unterschied macht.

    
Toby Hede 28.03.2011, 00:43
quelle

1 Antwort

7

Nein, du machst die Dinge richtig. Sie müssen jedoch einen Verweis auf Ihre Channel -Instanz beibehalten. Sobald Sie diesen Kanal haben, müssen Sie, solange er geöffnet ist, keinen weiteren Bootstrap erstellen. (Wenn Sie das tun.)

Das habe ich in einem aktuellen Projekt verwendet:

Klasse ClientConnection (Konstruktor)

%Vor%

Klasse ClientConnection.connect (String-Host, int-Port)

%Vor%

Also, im Grunde behalte ich nur einen Verweis auf bootstrap und channel , jedoch wird ersteres außerhalb dieser Codezeilen nicht verwendet.

Hinweis: Sie sollten bootstrap.releaseExternalResources(); nur einmal ausführen, wenn die Anwendung beendet wird. In meinem Fall sendet der Client einige Dateien, schließt dann den Kanal und beendet ihn.

Sobald Sie eine verbundene Instanz Channel haben, müssen Sie diese nur verwenden, bis Sie sie wieder schließen. Sobald es geschlossen ist, können Sie bootstrap aufrufen, um erneut ein neues Channel zu erstellen.

Ich persönlich finde Netty am Anfang etwas schwer zu verstehen, aber sobald Sie begreifen, wie es funktioniert, ist es einfach das beste NIO-Framework in Java. IMO.

    
Yanick Rochon 31.03.2011, 04:00
quelle

Tags und Links