2012-04-09 5 views
7

Ich habe MOD_SPDY auf meinem Apache-Server eingerichtet und möchte nun meinen Client-Code nachzurüsten, um Nettys SPDY-Implementierung zu verwenden, um meine Anfragen über einen SPDY-Kanal an den Server zu senden.Verwendung von SPDY mit Netty

Dies ist meine erste Erfahrung mit Netty, also denke ich, dass ich irgendwie meinen Kanal konfigurieren und dann Anfragen senden muss. Das Problem ist, dass es nicht sehr klar ist, wie genau die Kanäle konfiguriert werden und auch danach, wie mehrere HTTP-Anfragen innerhalb des Kanals verfolgt werden, die möglicherweise gleichzeitig ausgeführt werden.

Ich habe um gegoogelt und fand das SPDY Paket: http://netty.io/docs/stable/api/org/jboss/netty/handler/codec/spdy/package-summary.html

aber die Dokumentation ist noch recht dort dünn. Ich habe keine Beispiele für die Verwendung des Codes gefunden, sondern nur die Ankündigung, dass es in der neuesten Version vorhanden ist.

Hat jemand ein Beispiel darüber, wie man einen SPDY-Kanal erstellt und dann mehrere Anfragen und Antworten sendet/verfolgt? Wie würde diese Funktion auch funktionieren, wenn der Server SPDY nicht unterstützt und der Kanal auf eine Standard-SSL-Verbindung zurückgreift?

+0

Wenn Sie nicht an Netty gebunden sind, können Sie vielleicht versuchen, Jetty SPDY, siehe http://webtide.intalio.com/2012/03/spdy-support-in-jjety/ und http://www.smartjava.org/content/how-use-spdy-jetty. – sbordet

+1

@svordet Bill hat bereits einen Server, er braucht einen Client. – Slartibartfast

+0

Eigentlich sieht es so aus, als ob sbordet korrekt ist; Jetty hat auch einen SPDY-Client, mit dem man vielleicht leichter arbeiten kann: http://wiki.eclipse.org/Jetty/Feature/SPDY#Using_SPDY_Client_Applications –

Antwort

3

Nur Beispiel, das ich auf Netty und SPDY ist ein Test-Code für SessionHandler und socket echo test finden konnte. Ich muss dieses Ding noch laufen lassen, aber Ihr Kunde sollte eine Pipeline bestehend aus SpdyFrameCodec, SpdySessionHandler und Ihrem Handler machen.

Ihr Handler sollte nach EchoHandler im Sitzungstest modelliert werden, weil auf diese Weise SpdySessionHandler Job der Entschlüsselung von RAW-Frames in sinnvoller und macht einige Dinge wie von SPDY-Protokoll erforderlich.

Wie im Fall-Backing gibt es SpdyHttpCodec in Snapshot-Version der Netty, die von SPDY zu HTTP übersetzt. Auf diese Weise können Sie Ihren Client-Handler in Bezug auf HTTP erstellen und Nachrichten empfangen, die entweder über SPDY oder HTTP transparent waren. Um dies zu tun, ist es erforderlich, etwas Ähnliches zu implementieren, wie zum Beispiel port unification.

Alles, was gesagt wurde. Es gibt Platz für einige Utility-Klassen/Handler, um all dies zu einem "out of the box" -Erlebnis zu machen. Ich wollte ein funktionierendes Beispiel machen, aber es fehlt mir gerade jetzt an Zeit dafür, und es würde zu viel Code geben, um ihn hier einfach als Antwort einzufügen.

+0

Ah, also ich habe einfach mehrere Kanäle ab Werk angefordert und unter der Haube die SPDY-Handler wird sie multiplexen? In welcher Reihenfolge sollte ich die Handler hinzufügen? –

+0

Leider ist es nicht so einfach, aber es ist möglich, es mit bereitgestellten Klassen zu machen. Ich bin daran interessiert, diese Arbeit selbst zu machen, also werde ich später versuchen, Arbeitscode zu erstellen. – Slartibartfast

2

Es gibt nicht viele Beispiele für die Verwendung von Spdy mit Anlegesteg. Ich bin normalerweise nicht einer für schamlose Werbung, aber ich habe nur ein komplettes Beispiel geschrieben, wie man das macht, was man will. Ich habe netty konfiguriert, um spdy zu dienen, wenn der Client es unterstützt und auf http zurückzugreifen, wenn spdy nicht verfügbar ist. Sie finden den Code unter: http://www.smartjava.org/content/using-spdy-and-http-transparently-using-netty

+0

Danke für die Antwort, aber ich suche das Gegenteil. Ich möchte einen HTTP * Client *, der SPDY verwendet, wenn verfügbar, aber auf reguläres HTTP zurückgreift. –

+0

Ah, so.Dann können Sie immer noch den gleichen Ansatz und die gleichen Handler verwenden. Aber anstatt einen ServerBootstrap zu verwenden, verwenden Sie einen ClientBootstrap –