Tomcat 6で実現!
Ajaxを超える通信技術Comet
株式会社アメニクス
x-lab チーム
2007/12/12
Ajaxを超える? Tomcat 6で搭載されたCometとは?
| 今回の主な内容 |
前回はTomcatを“安全”に活用するために、ツールを使った運用の仕方やTomcatの設定について解説しました。
今回はTomcatの安全性から少し離れて、Tomcat 6の新機能の利用方法について解説します。Tomcat 6では、いくつかの大きな拡張がありましたが、今回はJ2SE 1.5で実装されたNew I/O API(java.nioパッケージ)を用いたComet(コメット)通信について解説します。
おさらい 「通常のHTTPでの通信」 |
| 通常のHTTPでの通信はクライアントのWebブラウザなどからサーバへリクエストを送信し、サーバはリクエストを解釈してレスポンスを返します。つまり、通信のタイミングはクライアント側が握っており、サーバ側から見ると好きなタイミングで通信ができないので、クライアントのWebブラウザから発信されるリクエストに対してレスポンスを返す、という処理を1サイクルとして行っている「プル型の通信」といえます。 |
■ 疑似的なリアルタイム通信
プル型の通信では、サーバ側で情報の更新があった場合などにリアルタイムにデータを取得できません。現在のWebアプリケーションで「疑似的なリアルタイム」のデータ更新を行うためには、クライアント側から定期的にリクエストを送信するなどの対応を取っています。
しかし、このような処理はクライアント・サーバに掛かる負荷が大きいという問題に併せて、通信負荷が非常に大きくなりクライアント数が増えれば増えるほど処理するトラフィックが増えてしまうという問題があります。
■ クライアント側だけでなくサーバ側からも非同期処理を実現するComet
このような問題を解決するために開発された技術がCometです。Cometは、HTTPの通信をそのまま利用しつつ、疑似的な「プッシュ型通信」を行う仕組みになっています。
Cometでは、まずクライアントから発行されたリクエストをサーバ側で受けた後に、HTTPコネクションをサーバで開きっぱなしにするため、クライアントに対して送信するはずのサーバからのレスポンスを待たせます。こうすることで、データ送信のタイミングをサーバ側へ委譲します。こうして、自分が送信したリクエストの内容を反映させる場合や、ほかの人が送信したリクエストに対してサーバが処理したいときに、レスポンスを返します。
サーバがクライアントへレスポンスを返した直後に、またクライアントからリクエストを送信させることでまた先の状態に戻り、疑似リアルタイム通信ができるようになり、チャットのようなリアルタイム更新アプリケーションの実装ができるようになります。
![]() |
| 図1 コメットのアーキテクチャ(@IT「リバースAjax機能はAjax+Javaをもっとやさしくする?」より再掲載) |
Ajaxは、クライアント側からの非同期処理を実現する技術ですが、Cometはそれに加えて、サーバ側からの非同期処理も実現できる技術なのです。詳細は@ITの記事「リバースAjax機能はAjax+Javaをもっとやさしくする?」をご参照ください。
Tomcatを用いてCometを実装するには?
Tomcat 6では、Cometを実装できるコネクタは2つあります。
■ APRコネクタは専用ライブラリが必要
1つはNIO(New I/O)のコネクタを用いる方法で、もう1つはAPR(Apache Portable Runtime)コネクタを用いて実装する方法です。
![]() |
| 図2 APRのぺージ |
APRを用いる方法は、2007年12月現在では導入に専用ライブラリの導入など必要なので、今回はNIOコネクタを用いてCometを実装してみましょう。
■ NIOコネクタを使用するためのTomcatの設定
まず、NIOコネクタが利用できるようにTomcatの設定を変更します。server.xmlをエディタで開いて次のように編集してください。server.xmlの中身の詳細は前回の「Tomcatの主要な設定はserver.xmlで」以降をご参照ください。
server.xmlを開いたら、connectorのprotocolを「org.apache.coyote.http11.Http11Protocol」から「org.apache.coyote.http11.Http11NioProtocol」へと変更します。
| server.xmlの変更 |
<Server port="8005" shutdown="SHUTDOWN"> |
ファイルの編集が終わったら保存し、Tomcatを再起動することでNIOコネクタが有効になります。後からweb.xmlの修正で再起動が必要になるので、取りあえずこのまま次に移りましょう。
Tomcat 6でCometを使うための設定はこれで終わりです。次ページではCometを使ったチャットアプリケーションの実装方法を解説します。
| 1-2-3 |
| INDEX | ||
| 第3回 Tomcat 6で実現! Ajaxを超える通信技術Comet | ||
| Page1 Ajaxを超える? Tomcat 6で搭載されたCometとは? Tomcatを用いてCometを実装するには? |
||
| Page2 Cometを使ったチャットアプリケーション |
||
| Page3 Cometでチャットをしてみよう! 次回はTomcatが持つセキュリティリスクについて |
||
Tomcatはどこまで“安全”にできるのか? バックナンバー 連載インデックスへ»
- 第1回 “安全”のためにTomcatを理解し、構築し、動作させる
- 第2回 Tomcatをツールで運用し、設定の基礎を知る
- 第3回 Tomcat 6で実現! Ajaxを超える通信技術Comet
- 第4回 Tomcatのセキュリティとリスクの基本分かってる?
- 第5回 無料でWebアプリにありがちな脆弱性を調べて治す
- 最終回 Tomcatを安全にするセキュリティマネージャとは?
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








