Netty 4 で SPDY 3.1 サーバとクライアント

スポンサーリンク

Netty 4.0.16.Final の Example を使用して,SPDY 3.1 のサーバとクライアントを実行してみます.

Oracle Java SE 7u51
Eclipse Kepler SR1
OS X 10.9.2

Example が用意されています.
https://github.com/netty/netty/tree/netty-4.0.16.Final/example/src/main/java/io/netty/example/spdy

基本的にこれをコピーし,SSL/TLS の Keystore の部分を自分で作成したものに変更しました.

自己認証局によるサーバ秘密鍵,証明書の作成はこちら.
[OS X] 自己認証局 (自己CA) による SSL/TLS サーバ証明書の作成

Java の Keystore,Truststore についてはこちら.
Keystore と Truststore" target="_blank">[OS X] Java Keystore と Truststore</a> <h1>サーバサイドのソース</h1> TODO: 後で GitHub にでも上げておく. <h1>クライアントのソース</h1> TODO: 後で GitHub にでも上げておく. <h1>Java の NPN 実装</h1> OpenJDK 向けの NPN 実装は,<a href="http://repo2.maven.org/maven2/org/mortbay/jetty/npn/" target="_blank">http://repo2.maven.org/maven2/org/mortbay/jetty/npn/</a> にあります. Oracle Java SE でも恐らく使えるっぽいです.(何の確証もありません) 7u51 には,npn-boot-1.1.6.v20130911.jar をダウンロードすればよいでしょう. <h1>接続確認</h1> サーバサイドの実行ファイルを spdy_server.jar, クライアントサイドの実行ファイルを spdy_client.jar とします. まず,サーバを起動させます. [bash] . java -Xbootclasspath/p:/path/to/npn-boot-1.1.6.v20130911.jar -jar spdy_server.jar . [/bash] 続いて,クライアントを実行します. [bash] . java -Xbootclasspath/p:/path/to/npn-boot-1.1.6.v20130911.jar -jar spdy_client.jar . [/bash] サーバサイドのログ [java] SPDY web server started at port 8443. Open your SPDY enabled browser and navigate to https://localhost:8443/ If using Chrome browser, check your SPDY sessions at chrome://net-internals/#spdy [S] NPN received for 4991f017[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL] [S] NPN protocols [spdy/3.1, spdy/3, http/1.1] sent to client for 4991f017[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL] [S] NPN selected 'spdy/3.1' for 4991f017[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL] Feb 28, 2014 2:44:56 AM io.netty.example.spdy.server.SpdyOrHttpHandler getProtocol INFO: Selected Protocol is SPDY_3_1 クライアントサイドのログ

Connected to [example.test:8443]
[C] NPN supported for 19b6b59c[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL]
Feb 28, 2014 2:44:56 AM io.netty.example.spdy.client.SpdyFrameLogger log
INFO: 
----------------OUTBOUND--------------------
DefaultSpdySynStreamFrame(last: true; unidirectional: false)
--> Stream-ID = 1
--> Priority = 0
--> Headers:
    :method: GET
    :path: 
    :version: HTTP/1.1
    :host: example.test
    :scheme: https
    accept-encoding: gzip
------------------------------------
[C] NPN protocols [spdy/3.1, spdy/3, http/1.1] received from server for 19b6b59c[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL]
[C] NPN selected 'spdy/3.1' for 19b6b59c[SSLEngine[hostname=null port=-1] SSL_NULL_WITH_NULL_NULL]
Feb 28, 2014 2:44:56 AM io.netty.example.spdy.client.SpdyFrameLogger log
INFO: 
----------------INBOUND--------------------
DefaultSpdySynReplyFrame(last: false)
--> Stream-ID = 1
--> Headers:
    :status: 200 OK
    :version: HTTP/1.1
    content-length: 40
    content-type: text/plain; charset=UTF-8
------------------------------------
Feb 28, 2014 2:44:56 AM io.netty.example.spdy.client.SpdyFrameLogger log
INFO: 
----------------INBOUND--------------------
DefaultSpdyDataFrame(last: true)
--> Stream-ID = 1
--> Size = 40
------------------------------------
STATUS: 200 OK
VERSION: HTTP/1.1

HEADER: content-type = text/plain; charset=UTF-8
HEADER: X-SPDY-Stream-ID = 1
HEADER: Content-Length = 40

CONTENT {
Hello World Fri Feb 28 02:44:56 JST 2014} END OF CONTENT
Finished SPDY HTTP GET
Feb 28, 2014 2:44:56 AM io.netty.example.spdy.client.SpdyFrameLogger log
INFO: 
----------------OUTBOUND--------------------
DefaultSpdyGoAwayFrame
--> Last-good-stream-ID = 0
--> Status: OK
------------------------------------
SPDY 3.1 で通信できているっぽいです.

JavaNettySPDY
スポンサーリンク
コピペワールド