サーブレットは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リクエストへの応答例 |
■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リクエストシーケンス例 |
この場合、ユーザーAがクライアントであり、ユーザーBがサーバになります。しかし、電話を切る際の要求(BYE)はユーザーBから出ており、ユーザーAがその要求を受け取っています。このとき、ユーザーBがクライアントでありユーザーAがサーバになります。このようにSIPでは、クライアントとサーバの役割を1回の通信の中で逆転できます。
このクライアント機能をUAC(User Agent Client)、サーバ機能をUAS(User Agent Server)、端末をUA(User Agent)と呼びます。このような構造を持つため、SIPサーブレットはレスポンスを受信するためのメソッドも備えています。
表2 レスポンスを受信するためのメソッド例 | |||||||||
|
レスポンスを受信するためのメソッドが用意されているということは、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全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|