Hatena::ブログ(Diary)

IT素人がIT機器を弄ったり妄想したりする日記

2010-06-27

[]websocketで遊んでみた 22:43 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と上記ホワイトボードアプリhtmljsを参考にした。

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