Playしてますか?
ボクはしてます。Scalaです。 ScalaかわいいよScala。
あ、そんなに可愛くなかったわ。
可愛いプログラミング言語って何だろうね?皆様のお便りお待ちしてます。 ]
Javaの実装ってすごいんだね・・・ Playで作るwebsocketサーバ by @kamekoopa on @slideshare #java #playframework http://t.co/Ar9l9iz7Gr
— numa (@numa08) 2013, 6月 25
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
と言ったイベントハンドラを登録していきます。
とりあえずこれでサーバーにメッセージを送って、メッセージを返してもらう処理ができあがりました。 簡単ですね!!