Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/04/12 10:20

『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」を設定してください。

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


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

著者プロフィール

  • arton(アートン)

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

バックナンバー

連載:Javaによる簡易HTTPサーバーの作成
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5