サーブレットはHTTPだけじゃない!
NGN時代の有力な基盤技術? SIPサーブレット入門


ナレッジオンデマンド 宮下知起
2007/7/30


HTTPサーブレットとの相違点から見たSIPサーブレット

 SIPサーブレットとHTTPサーブレットの違いから、SIPサーブレットをもう少し掘り下げてみましょう。

SIPの基本サイクル

 SIPでは、2つのIP電話間の通信は、INVITE(招待)リクエストをサーバに送信することから始まります。INVITEを受けたサーバは、クライアントに100 Trying(処理中)レスポンスを返します(100 Tryingは、処理中であることをクライアントに知らせる役割があります)。

 次に、通話相手のアドレスを発見すると、今度はクライアントに180 Ringing(呼び出し中)を返します(電話の呼び出し音に相当)。呼び出し音を聞いた通話相手が応答すると、SIPサーバはクライアントに200 OK(成功)をレスポンスとして返します。この流れを図3に図示しました。

図3 INVITEリクエストへの応答例
図3 INVITEリクエストへの応答例

HTTPサーブレットとの相違点その1:
リクエストとレスポンスが1対多の関係

 ここで分かることは、クライアントからのINVITEリクエストに対して、サーバは3つのレスポンス(100 Trying、180 Ringing、200 OK)を返していることです。SIPサーブレットでこのようなシーケンスを実装するには、doXxxメソッドでリクエストのみを指定し、アプリケーションがオーバーライドしたメソッドで必要なレスポンスを生成して返します。

 このように、HTTPサーブレットでは、リクエストとレスポンスが1対1ですが、SIPサーブレットには、1対多の構成があります。

HTTPサーブレットとの相違点その2:
クライアントとサーバが固定されない

 SIPの重要な特徴の1つとして、クライアントとサーバが固定されないという点があります。HTTPの場合、HTTPリクエストを送信するのは、常にWebブラウザであり、WebブラウザがHTTPリクエストを受信することはありません。

 図4の例では、ユーザーAが電話をかけるために、INVITEリクエストを出したのに対して、ユーザーBが要求を受け取っています。

図4 SIPリクエストシーケンス例
図4 SIPリクエストシーケンス例

 この場合、ユーザーAがクライアントであり、ユーザーBがサーバになります。しかし、電話を切る際の要求(BYE)はユーザーBから出ており、ユーザーAがその要求を受け取っています。このとき、ユーザーBがクライアントでありユーザーAがサーバになります。このようにSIPでは、クライアントとサーバの役割を1回の通信の中で逆転できます。

 このクライアント機能をUACUser Agent Client)、サーバ機能をUASUser Agent Server)、端末をUAUser Agent)と呼びます。このような構造を持つため、SIPサーブレットはレスポンスを受信するためのメソッドも備えています。

表2 レスポンスを受信するためのメソッド例
メソッド名 引数 説明
doSuccessResponse SipServletResponse 成功応答の受信時に呼び出されるメソッド
doErrorResponse SipServletResponse エラー応答の受信時に呼び出されるメソッド

 レスポンスを受信するためのメソッドが用意されているということは、SIPサーブレットではリクエストとレスポンスが別々のスレッドでアプリケーションに送られていることを意味しています。

 このため、SIPアプリケーションサーバでは、SIPメッセージの関連を明示的に管理する必要があります。リクエストとレスポンスが独立しているために、処理のプロセスは複雑になるものの、より柔軟なプロセスを記述することも可能になるのです。

HTTPサーブレットとの相違点その3:
プロキシ機能

 HTTPサーブレットと大きく異なる機能として「フォーク」があります。フォークとは、1つのリクエストを複数のサーバに同時にプロキシするプロセスのことです。

 例えば、1つの電話番号に複数の端末(オペレータ)が関連付けられている場合に使用されます。

2/3

 INDEX NGN時代の有力な基盤技術? SIPサーブレット入門
  Page1
  SIPサーブレットとは何か?
HTTPサーブレットとの類似点から見たSIPサーブレット
Page2
  HTTPサーブレットとの相違点から見たSIPサーブレット
  Page3
  ソースコード・シーケンス図でSIPサーブレットをひも解く
SIPサーブレットも試してみよう


Java Solution全記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間