2013年01月11日

[Java]keepalive

java でHTTPアクセスをするとき、まさかsocketから書くようなメンドイことはしまい。
HttpURLConnectionなり、HttpClientなりを使うと思う。
(Rawソケットを触りたいなら、すでに言語選定が間違っているしね)

このHTTPURLConnectionは結局はHTTPClientを内部で呼ぶんだけど
こいつにはkeepaliveがかかる。

制御するパラメータは以下のシステムプロパティ
---------------------------------------------

キープアライブの動作を制御するシステムプロパティーは次のとおりです。

http.keepAlive=
デフォルト: true

キープアライブ (持続) 接続をサポートすべきかどうかを示します。

http.maxConnections=
デフォルト: 5

任意の時点で接続先ごとにキープアライブを実行できる最大接続数を示します。

http://docs.oracle.com/javase/jp/6/technotes/guides/net/http-keepalive.html
---------------------------------------------
grepcode (http://grepcode.com/)からHTTP処理時の流れを追いかけてみると
URLスキーマから、処理すべきクラスを決定して適切なクラスをリフレクションしているようだ。
コード読んでいて気がついたんだけど
keepaliveの破棄はリアルタイムではなく、5秒固定のポーリングを行い、
その時点でタイムアウトしていれば破棄する、という処理だった。
よって、サーバー側から5秒以下のkeepalive要求が来たとしても
java側は最低5秒まではsocketを維持している。
(維持しているだけで使用はできないのでご安心を)

著作権的に該当箇所を引用していいかわからない(sunパッケージ内だから)ので
気になる人は上のサイトから自分で確認してくだしあ。

openJDKは原則GPLだけど一部例外アリとかそんなんだった気がするんだよな。
OSSはこういうライセンスがフリーなようでフリーじゃないような罠が結構あるんだよなぁ。

posted by koteitan at 15:12| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/312628779

この記事へのトラックバック