3月 232013
<< sinatra/rocketio/clientとem-rocketio-client作った || Sinatra RocketIOで家のRaspberry PiのArduinoをリアルタイムで見る >>
eventmachineに依存していないruby用websocketクライアントでまともなのが無いので作った。
shokai/websocket-client-simple · GitHub
既にwebsocket-clientというgemがあるけど、ドラフト0しか実装されていないしpull requestできるリポジトリが無かったので作った。
名前はwebsocket-client2というnode臭がするのと後ろにliteとかsimpleとか付けるperl臭がするのと、わけわからない名前付けるruby臭で迷った。
インストール
gem install websocket-client-simple
使い方
JavaScriptのWebSocketと同じように使える
require 'rubygems'threadで動くので、最後にloopしておかないとRubyが終了してしまいます
require 'websocket-client-simple'
ws = WebSocket::Client::Simple.connect 'http://example.com:8888'
ws.on :message do |msg|
puts msg.data
end
ws.on :open do
ws.send 'hello!!!'
end
ws.on :close do |e|
p e
exit 1
end
loop do
ws.send STDIN.gets.strip
end
サンプルに、
- rubyで書いたwebsocketチャットサーバー
- webブラウザ用チャットクライアント
- websocket-client-simpleで書いたチャットクライアント
websocketのデータのparseにはimanel氏のwebsocketというgemを使った。
とても良くテストなども書かれていてメンテされているので、TCPSocketをそれに食わせるだけでクライアント書けた。
あとちゃんと試してないけど多分
ws.send binary_data, :type => :binaryでバイナリ送信できると思う。