Node.jsだけじゃない

Playで作るWebsocketサーバ
磯○~!
Websocketサーバー作ろうぜ~~!
中○!
じゃあ早速Node.jsをインストーr
まったく磯○は短絡的なんだから~
Node以外でも
Websocketサーバは作れるんだぜ?
…ほ、本当かよ中○!
正直ボクはJavascriptが苦手なんだ!
早くその方法を教えてくれよ!
土下座(げざ)れ。
………。
Not Only Node.Js
   という訳で今回のLTは
     Javaで

     Playframeworkで

     かんたんWebsocketサーバ

   をお送りします

   (土下座る必要はありません)
New generation framework for Java and Scala

                    Playframework
Playframework

 みんな知ってる新世代Web FW
 最近世間的にもアツさが高まってきた。

 JavaとScalaで使える

 僕はJavaしか使えない(キリッ



   WebSocketにも対応!
Playframework

   Playだと何がうれしいの?
     Java/ScalaのFWなので既存資産がいっぱい


     Controllerの書き方をちょっと変えるだけで簡
     単にWebSocket対応Controllerに変身

     Playのルーティングルールの上で動く
      RESTなエンドポイントと同居したり
      複数のWebsocketエンドポイント作ったり
      URLからパラメータ取ったり
I want to say “Hello World”

              HOW TO
ゴタクはいいから
早く作って見せてくれよ、中○!
まったく磯○はせっかちだなぁ~
焦らなくても今教えてやるよ~
…た…頼むよ…。
HOW TO

   手順は2つ
     routesファイルにルーティング設定書く

     ControllerをWebSocketオブジェクトを返すよ
     うに書く

     以上
HOW TO

   routes
     普通のRESTエンドポイントと一緒

     例えばクエリパラメータを取りたければ、こう



     GET   /ws controllers.Application.ws(id:Int)
HOW TO
   controller
       通常のcontroller

         public   static Result ws(int id){…}


       これを

         public   static WebSocket<A> ws(int id){…}


       こう書き換える。
HOW TO

   controller
     型パラメータ<A>はクライアントとやり取りす
     るメッセージの型を指定する。
       文字列とかJsonとか指定できる。



     戻りの型のWebSocketクラスは抽象クラス
       クライアントからの入力を表すIn<A>

       クライアントへの出力を表すOut<A>

       を引数にとるonReady(in,   out)を実装する
HOW TO

   controller
     こんな感じ
HOW TO
   controller
       クライアントからメッセージを受け取った時の処理は、
        In<A>にコールバックとして設定する

       クライアントにメッセージを送信したい時は、Out<A>
        のwriteメソッドで送信できる

       特定のクライアントだけにメッセージを送信したいみ
        たいな場合は?
         なんかしら(IDとか)をキーにして、Out<A>をMapみたいなも
          のに入れておきましょう
         json使って、アプリレベルでのプロトコルを設計する必要があ
          ります。
HOW TO

   こんな感じ
見づらいぞ、中
Gistに貼っておいてやったぞ、磯○!
https://gist.github.com/kamekoopa/5268800
(反応がない。ただの屍のようだ。)
The thing you should see is only here

                    Conclusion
Conclusion
   Node.jsだけじゃないんだよ
       Playframeworkという選択肢
       パフォーマンスもNodeに劣らない

   Java/Scalaで書ける安心感
       静的型付き言語
       Javaの既存資産が有効活用できるよ

   Playなら
       開発初動がほんと早い
           今回のサンプルはLT資料書きながらでも
            プロジェクト作成から始めて数分で出来た。
       Websocket専用の流儀とかがあんまりない
           controllerでWebSocket<A>抽象クラス実装して返すだけ
おわり

Playで作るwebsocketサーバ