コメットはサーバーで発生したイベントを即座にクライアント側に反映させる機能です。
そのためにクライアント側で定期的にURLを発行させて、サーバー側はイベントがなければずっと黙っています。
イベントが発生したら、サーバーは放置していたリクエストにレスポンスを返して、ブラウザはそれを表示します。
こうしてリアルタイム通知が可能になります。
では具体的にAipoのメッセージのリアルタイム通知について解説します。
- メッセージ受信者AさんはAipoをブラウザで表示しています。
- この時Aさんは定期的(10分ごと)にURLをリクエストしています。/war/src/main/webapp/check.htmlのparamsのtimeoutが発行間隔です(ミリ秒)
- これに対してサーバーはイベントがないので何も返しません。
- メッセージ送信者BさんがAさんにメッセージを送信します。
- サーバーはこれに対して処理します。この時にAさんからのリクエストをかえします。Aipoでは/Users/develop35/Documents/aipo/GitHub/aipo/core/src/main/java/com/aimluck/eip/http/ALCometServlet.javaのsendMessageメソッドがこれに対応します。
- Aさんのブラウザはこれを受信して画面に表示させます。さきほどのcheck.html内のparamsのsuccessにdataを引数として実行されます。
- この場合メッセージの受信なのでdata.typeは”messagev2″です。この通知に対してjavascriptの条件分岐でより処理が進みます(実際のメッセージのリクエストなど)
このような処理の流れです。初めにページを開いた時の通知はメッセージが最初からリクエストされているので厳密にいうと通知のされ方が違います。コメットでは一手間かかってます。