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ジャパン
- WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」 - Javaの例外処理で知らないと損する7つのテクニック (2011/12/20)
例外とエラー処理を使いこなすために独自に例外を定義する方法や、ちょっとした例外のテクニック・心構えを紹介します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


