Tomcatはどこまで“安全”にできるのか?(3)

Tomcat 6で実現!
Ajaxを超える通信技術Comet


株式会社アメニクス
x-lab チーム
2007/12/12


Ajaxを超える? Tomcat 6で搭載されたCometとは?

今回の主な内容
Ajaxを超える? Tomcat 6で搭載されたCometとは?
Tomcatを用いてCometを実装するには?
Cometを使ったチャットアプリケーション
Cometでチャットをしてみよう!
次回はTomcatが持つセキュリティリスクについて

 前回はTomcatを“安全”に活用するために、ツールを使った運用の仕方やTomcatの設定について解説しました。

 今回はTomcatの安全性から少し離れて、Tomcat 6の新機能の利用方法について解説します。Tomcat 6では、いくつかの大きな拡張がありましたが、今回はJ2SE 1.5で実装されたNew I/O APIjava.nioパッケージ)を用いたComet(コメット)通信について解説します。

おさらい 「通常のHTTPでの通信」

通常のHTTPでの通信はクライアントWebブラウザなどからサーバリクエストを送信し、サーバはリクエストを解釈してレスポンスを返します。つまり、通信のタイミングはクライアント側が握っており、サーバ側から見ると好きなタイミングで通信ができないので、クライアントのWebブラウザから発信されるリクエストに対してレスポンスを返す、という処理を1サイクルとして行っている「プル型の通信」といえます。

疑似的なリアルタイム通信

 プル型の通信では、サーバ側で情報の更新があった場合などにリアルタイムにデータを取得できません。現在のWebアプリケーションで「疑似的なリアルタイム」のデータ更新を行うためには、クライアント側から定期的にリクエストを送信するなどの対応を取っています。

 しかし、このような処理はクライアント・サーバに掛かる負荷が大きいという問題に併せて、通信負荷が非常に大きくなりクライアント数が増えれば増えるほど処理するトラフィックが増えてしまうという問題があります。

クライアント側だけでなくサーバ側からも非同期処理を実現するComet

 このような問題を解決するために開発された技術がCometです。Cometは、HTTPの通信をそのまま利用しつつ、疑似的な「プッシュ型通信」を行う仕組みになっています。

 Cometでは、まずクライアントから発行されたリクエストをサーバ側で受けた後に、HTTPコネクションをサーバで開きっぱなしにするため、クライアントに対して送信するはずのサーバからのレスポンスを待たせます。こうすることで、データ送信のタイミングをサーバ側へ委譲します。こうして、自分が送信したリクエストの内容を反映させる場合や、ほかの人が送信したリクエストに対してサーバが処理したいときに、レスポンスを返します。

 サーバがクライアントへレスポンスを返した直後に、またクライアントからリクエストを送信させることでまた先の状態に戻り、疑似リアルタイム通信ができるようになり、チャットのようなリアルタイム更新アプリケーションの実装ができるようになります。

図1 Cometアーキテクチャ
図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のぺージ
図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">
  <Service name="Catalina">
    <Connector port="8080"
      protocol="org.apache.coyote.http11.Http11NioProtocol"
      connectionTimeout="10000" redirectPort="8443"
      scheme="http" secure="false" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false" />
    </Engine>
  </Service>
</Server>

 ファイルの編集が終わったら保存し、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が持つセキュリティリスクについて



Java Solution全記事一覧

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! それはスペックで、導入が目的ではない
導入の「先」を見据えた、ITIL運用とは?

  New! 見れば必ず気に入る“机の上”PCサーバ
小さくて静か。ユーザー目線で考えた自信作

  New! あなたの会社の将来は本当に大丈夫?
屋台骨を支えるIT人材、育成できてますか?

  New! いま、SaaSエンジニアがおもしろい!
〜エンジニア・キャリア進化論(第10回)〜

  このご時勢、数年後の計画は分からない
迷った時のミッドレンジストレージはコレ

  複数のストレージを“1つ”にできる、
ストレージ管理の「魔法の箱」を徹底解剖

  シンプル・簡単 iSCSI仮想化ストレージ
ITインフラ全体の“正しい仮想化”実現!

  ソフトウェアで、できることとは?
ビジネス直結「リカバリ・マネジメント」

  そのサーバに統合して安心ですか?
「現実的なサーバ統合」の3つの要件とは

  ――品質は上げてコストは半減――
ロボットが見せるPC管理の新しい形

  WebLogicとCoherenceが融合した
グリッド型アプリケーションサーバを実現

  「偽装」も「疑わしい動き」も逃さない
1つのエージェントで徹底的にPCを守る!

  もはや、プライベートのツールではない!
企業・自治体も導入するSNSの効果とは?

  「リポート機能は“すごい”のひとこと」
ある保険会社の“DB監査製品”導入事例

  新しい技術の導入 ⇒ また最初からやり直し
の必要がなくなる「普遍性のあるノウハウ」

  ユーザー任せのパスワード管理は危険!
法整備対策に有効な高効果・低コスト製品

  『フリーでやってみたいけど……』
そんなエンジニアの不安をすべて解決!

  「だれも見たことがない、10年後の
『ソフトウェア産業』を一緒に創りたい」

  「ウチはUTMなんかいらない」ってホント?
エンタープライズ市場でも選ばれる理由

  物理も仮想も効率的に運用・管理したい!
問題と解決策はこちら≫≫

  【工事進行基準】対策をチャンスに!
プロジェクト「見える化」で効率アップ!

  【工事進行基準】システム業界も導入!
新時代のプロジェクト管理はこれで決まり

  看護休暇、時短勤務、育児フレックス……。
各種の支援で「柔軟な働き方が可能な環境」

  『こうあるべし』ではなく、全ての人が
力をフルに発揮できる職場環境を考える

  宅急便もサーバも、止めない・止まらない
これが、クロネコヤマトのデータセンター

  高評価の技術採用で“いいところ取り”
低価格なのに機能は“フル”な次世代UTM

  “超高速”なのに“低価格”なUTM
その性能の高さの秘密とメリットに迫る!

  金融業界でのBPM適用<成功ケース>紹介
BPMシステムの導入のための5つのポイント

  間違いだらけのセキュリティ対策から脱却
「脅威の見えない化」対抗する2つの特徴

  “Windows”も“Linux”も“Solaris”も
SAP運用に最適な【x64サーバ】とは?

  転職した理由は「社風が合うと感じたから」
入社2カ月“勝ち組エンジニア”に話を聞く


ソリューションFLASHPR