ScalaとJetty7のWebSocketでリアルタイムチェックインマップを作ってみた

April 6, 2011 - Scala

チェックインマップのスクリーンショット

最近、会社の組織変更に伴い新グループに移動しました。 その際、グループ内の自己紹介用に作ったものをGithubに上げてみました。 動いているものを公開したかったのですが永続的に公開できる場所がないのでソース公開のみです。

以前scala advent calender 2010で「NettyでWebSocketサーバーを実装する」にてWebSocketサーバーを実装してましたが、今回はJettyを使っての実装にしてみました。

pub/subモデルもどきを採用してみたりしましたが、正直勉強不足でうまい実装方法ができていないのが現状。 少しづつリファクタリングしたいところ。 コメントやフォークでのツッコミいただけると大変嬉しいです。

実行方法

こちらに実行方法を記述してる通りにやれば動作するはず。

仕組み

  • TwitterのStreamingAPIを使って、foursquareのチェックインツイートを取得
  • それをWebsocket経由で地図にリアルタイムプロット

Jetty7を使うに当たって

今のところ、sbt-0.7.5RC1 + jetty7.3.1.v20110307で動作確認済みです。

jetty7.3のwebsocketを使うには、sbt-0.7.5RC以上を使わないといけないようです。 sbt0.7.4だとjetty7.1までしかコンパイルできず、jetty7.1だとwebsocketの最新仕様にあってなくてソケットオープン時にコケます。 (このあたりの組み合わせは記憶があいまいですが。。。)

scalaのjsonオブジェクトではなくsjsonを使うこと

scala.util.parsing.json.JSONをつかってシリアライズすると、javascript側でのevalに失敗します。 (原因はクオート処理しないため。) Scala内で完結するならまだしも、JavaScriptへ転送する場合はsjsonが良いようです。