websocketで遊んでみた

BD-Jでまともなソフトを作ってないのに色々遊びたくなるのが衝動ってやつ。
本業の合間にちょいとデモソフトでも組んで技術の確認だけやってみる。
 
参考にしたのはググってヒット率の高い記事。
websocketネタでサーバサイドがJavapythongolangJavascript
妙に本命定まらない雰囲気なので,あえて他を探してみた。
@makoto_inoue さんに呟かれたのもあってrubyつまりem-websocketでやってみた。
#なんだかロンドン在住の方らしい。
 
node.websocket.jsで超適当ホワイトボードアプリ
http://blog.bornneet.com/Entry/268/
 
em-websocket
http://github.com/igrigorik/em-websocket
 
em-websocketのサンプルであるecho.rbと上記ホワイトボードアプリのhtmlとjsを参考にした。
jsの方がclearボタンの挙動不審なので以下のように変更した。
たぶん,この方が合ってる。

canvas.addEventListener('mousedown', function(e) {
	x = e.layerX;
	y = e.layerY;
	ctx.beginPath();
	ctx.moveTo(x, y);
	isDraw = true;
}, 'false');

 
サーバアプリは以下のように 

require 'rubygems'
require 'em-websocket'

connections = Array.new

EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8000, :debug => true) do |ws|
  ws.onopen {
    connections.push ws unless connections.index ws
  }
  ws.onmessage { |msg|
    if msg=='start'
      ws.send $tmp1
    else
#      if msg != $tmp1
        $tmp1 = msg
        connections.each{|con| con.send $tmp1}
#      end
    end
  }
  ws.onclose   {
    connections.delete_if{|con| con==ws}
    puts "WebSocket closed"
  }
end

 
eventmachineブームが来てるのかなぁ。
すごく簡単で便利。

    • -

ちなみにruby1.9.1だとeventmachineを動かしきれなかったので
1.8.7で対応した。ググると動くらしいんだが・・・

    • -

以下のチャットアプリクライアントもポート番号変更だけで
上記のrubyサーバはそのままで動いた。簡単なのは簡単に作れるということだな。
 
WebSocketでChatを作ってみた
http://blog.liris.org/2009/12/websocketchat.html