Sharable

システム&ウェブのシェアラブル

Lv.10 コメットでサーバープッシュ [play framework] [java]

2012年3月29日

記念すべき(?)レベル10です!
ドルアーガの塔を昇るがごとき苦行、、、。
早くアプリ作りたい!
取説を読む前にゲームをやるタイプです。自分。
そんな自分を戒めてplayフレームワークのドキュメント読んでまとめてます。

さて。はて。


Lv.9のストリーミングは、コメットを実装するときに有用らしい!です。

※コメットについて触れているブログ。
Re::Monologueさん。お花のヘッダーが幻想的で素敵です。

コメットとは、サーバーからのプッシュ送信を疑似的に実装するテクニックの名称、
であってると思う、、、。※

かつ、playフレームワークにはplay.libs.Cometなるコメットのヘルパー※があるらしく、
とても簡単に使えるようだ!

目次

コメットの使い方

※公式にはreturnがついてなかった。scalaっぽく書いてるんだと思うけど、javaで統一させてる。
public static Result index() {
  Comet comet = new Comet("console.log") {
    public void onConnected() {
      sendMessage("kiki");
      sendMessage("foo");
      sendMessage("bar");
      close();
    }
  };

  return ok(comet);
}

動いた!簡単すぎる!

これを分解すると、実質は下記のようなコードを送っていることになるらしい。

out.write("<script>console.log('kiki')</script>");
out.write("<script>console.log('foo')</script>");
out.write("<script>console.log('bar')</script>");
…
response().setContentType("text/html");

ふむふむ。単純でいいな。

コメット実装での常套手段

が、iframeらしいです。へー。
iframeのsrcにてコメットが実行されるURL叩いて、コメットにて親画面のJSを呼ぶように
するのだとか。

公式ドキュメント通りにやってみた。

public static Result index() {
  Comet comet = new Comet("parent.cometMessage") {
    public void onConnected() {
      sendMessage("あいう");
      sendMessage("え");
      sendMessage("お");
      close();
    }
  };
  
  return ok(comet);//※
}

して、久しぶりにviewを触ってあげる。

<script type="text/javascript">
  var cometMessage = function(event) {
    console.log('Received event: ' + event)
  }
</script>

<iframe src="/comet"></iframe>

といってもこの記述を加えただけ。

これで動く。さくっと。
あ、もちろんconf/routesにも、

GET /comet controllers.Application.comet()

こんな感じの定義を追加してあげる。
コメット便利だなー。
無意味に使いたい。

アセスメント

  • コメットのヘルパークラスがあるということを知っている
  • コメット実装の常套手段が分かる

今回の公式ドキュメント探訪は、Comet socketでした。

このエントリーをはてなブックマークに追加