BD-Jでまともなソフトを作ってないのに色々遊びたくなるのが衝動ってやつ。
本業の合間にちょいとデモソフトでも組んで技術の確認だけやってみる。
参考にしたのはググってヒット率の高い記事。
websocketネタでサーバサイドがJava,python,golang,Javascriptと
妙に本命定まらない雰囲気なので,あえて他を探してみた。
@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