ScalaとPlayFramework2始めて数時間の人間が無謀にもWebSocketのお試しプログラム書いてみた

仕事でWebSocketのサーバ側書くことになりそうな気配がするので、PlayFramework 2.0使ってWebSocket版Echoサーバみたいなのを書いてみました。

  ws://localhost:9000/?id={自分のIDを表す適当な数字}

で接続した状態で

  {送信先のID}:{送信したいメッセージ}

形式でデータを送信すると、送信先IDで指定したIDで接続してる人へメッセージを送信する、みたいな感じです。
Scalaが分からなさ過ぎて死にそうでした。

コード

※ ログ出力用のコードが残ったままになってます…。

EnumeratorとIterateeの概念がさっぱりわからず、何かインプットストリームとアウトプットストリームみたいなもんだろぐらいの理解しか出来てません。
クエリで指定されたIDをキーにしたMap構造にEnumeratorを保持しておいて、接続済みのクライアントから入力があれば、該当のEnumeratorへpushする、みたいな感じでいいのかなぁ…。
メソッド直下は接続確立時のみしか通らなくて、実際にメッセージを受け取ったときはIterator.foreach[String] { ... }の中身しか実行されない模様。
コントローラのレイヤーでは

  • 接続確立
  • メッセージ受信
  • 接続断?

のイベントで駆動して、その他の細かいイベントはクライアントとアプリケーションレベルでプロトコルを決めて制御するって感じなのかしら?

結論

よく分からん/^o^\
というかまずScalaの勉強しないと…。

Scala逆引きレシピ

Scala逆引きレシピ