@numa08 猫耳帽子の女の子

明日目が覚めたら俺達の業界が夢のような世界になっているとイイナ。

WebSocketをやろう!Node.js?いやいや、Play!でしょ!

Playしてますか?

ボクはしてます。Scalaです。 ScalaかわいいよScala

あ、そんなに可愛くなかったわ。

可愛いプログラミング言語って何だろうね?皆様のお便りお待ちしてます。 ]

Scalaでしょ!

別にJavaをDisってるわけじゃないですが、コード量で言えばPlayのWebsocketはJavaよりお手軽にできそうです。

という訳でコードを書いて行きましょう。

route

GET       /socket                     controllers.Application.socket

routeはいつも通りRESTの表記でいいっぽいです。

Application.scala

import play.api._
import play.api.libs.iteratee._

object Applcation extends Controller {
  def turnon = WebSocket.using[String]{ request => 
    val in = Iteratee.foreach[String](println).mapDone { _ => println("Disconnected")}
    val out = Enumerator("Hello")
    (in, out)
  }
}

Websocketを使う場合は、いつものActionではなく、WebsSocketを利用するようです。 クライアントからのリクエストを受け取って、標準出力に表示し、Helloと返す、ただそれだけです。 接続が切れるとDisconnectedと標準出力に表示します。

client.js

      var webSock;
        var onMessage = function(message){
            console.log("Server send " + message.data);
        };
        var onError = function(error){
            console.log("Server error" + error);
        };
        var clickTunrOn = function(){
            webSock = new WebSocket('ws://localhost:9000/socket');
            webSock.onmessage = onMessage;
            webSock.onerror = onError;
            webSock.onopen = function(){
                webSock.send("hogehoge");
            };
        };

クライアントは今回Clomeで試しました。 webSock = new WebSock('ws://localhost:9000/socket');でオブジェクトを作成し、その後、onmessage,onerror,onopenと言ったイベントハンドラを登録していきます。

とりあえずこれでサーバーにメッセージを送って、メッセージを返してもらう処理ができあがりました。 簡単ですね!!