SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaによる簡易HTTPサーバーの作成

NIOの非ブロック接続を利用した多重IOの実装

Javaによる簡易HTTPサーバーの作成 第4回


  • このエントリーをはてなブックマークに追加

『Javaによる簡易HTTPサーバーの作成』シリーズの第4回では、クライアントとの通信に、これまで利用してきたSocketではなく、NIOで提供されるSocketChannelを利用します。SocketChannelを利用すると、シングルスレッドでも同時に複数のクライアント接続を処理できるようになります。

  • このエントリーをはてなブックマークに追加

はじめに

 『Javaによる簡易HTTPサーバーの作成』第4回目の今回は、クライアントとの通信に、これまで利用してきたSocketではなく、NIOで提供されるSocketChannelを利用します。

 Socketでは、実際の入出力にはStreamを利用します。この時、例えばInputStream#readを呼び出すと、データが読み込み可能になるか例外になるまではreadメソッドから制御が戻りません。そのため、同時に複数のクライアントからの要求を処理するためには、クライアントごとにスレッドを利用する必要がありました。

 これに対して、SocketChannelを非ブロックモードで利用すると、まだデータが到達していない、あるいはシステムの送信用バッファがフルになっているなどの理由でデータを転送できない時には、制御が呼び出し側に戻されます(これをJ2SEのAPIドキュメントでは「非ブロック接続」と呼んでいます)。この特性を利用して同時に複数のIOを少しずつ処理することで、シングルスレッドでも同時に複数のクライアント接続を処理できるようになります。

 本記事では、

  • 非ブロック接続の利用方法
  • NIOでread/writeに利用するBufferオブジェクトの利用方法

 について、コードを示しながら解説します。

対象読者

 本記事は、Javaプログラミングの中級者を対象に、J2SEのNIOの利用方法を解説します。

 NIOを利用すると、単一のスレッドで複数のクライアントからのリクエストを効率的に処理できるようになります。

必要な環境

 本記事のソースをビルド/実行するには、J2SE 5.0以上を利用してください。ソースファイルアーカイブは、直接NetBeans 5.0のプロジェクトとして開けるように構成してありますが、NetBeans 5.0を利用しなくても、コマンドラインからJDKおよびAntを利用してビルドできるように構成してあります。

 なお、ソースファイルアーカイブは、あらかじめJ2SE 5.0でビルドしたクラスファイルとjarを含んでいます。そのため、JREがあれば実行することが可能です。

 参考までに、筆者が利用した本記事のテスト環境は次のとおりです。

OSJ2SEAntJUnitIDEブラウザ
OS X1.5.0_051.6.23.8.1NetBeans5.0JSafari
Windows XP1.5.0_061.6.23.8.1NetBeans5.0JFirefox 1.0.7/IE6SP2

NetBeans 5.0からの利用

 メニューから[ファイル]-[プロジェクトを開く]を順に選択し、ソースファイルアーカイブを展開したディレクトリの「httpserver」ディレクトリを選択して、[プロジェクトフォルダを開く]をクリックしてください。

 プロジェクトが読み込まれたら、プロジェクトのコンテキストメニュー(ショートカットメニュー)から[プロパティ]をクリックし、[プロジェクトプロパティ]の[プロジェクトの実行]タブを選択して、[作業用ディレクトリ]に展開したディレクトリの「httpserver\html」を設定してください。

 以降、プロジェクトのコンテキストメニューから実行、デバッグ、テスト実行が可能となります。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ファイル構成

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Javaによる簡易HTTPサーバーの作成連載記事一覧

もっと読む

この記事の著者

arton(アートン)

専門は業界特化型のミドルウェアやフレームワークとそれを利用するアプリケーションの開発。需要に応じてメインフレームクラスから携帯端末までダウンサイジングしたりアップサイジングしたりしながらオブジェクトを連携させていくという変化に富んだ開発者人生を歩んでいる。著書に『Ruby③ オブジェクト指向とはじめての設計...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/358 2006/06/14 18:57

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング