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'
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
threadで動くので、最後にloopしておかないとRubyが終了してしまいます


サンプルに、
  • rubyで書いたwebsocketチャットサーバー
  • webブラウザ用チャットクライアント
  • websocket-client-simpleで書いたチャットクライアント
を入れておいた。



websocketのデータのparseにはimanel氏のwebsocketというgemを使った。
とても良くテストなども書かれていてメンテされているので、TCPSocketをそれに食わせるだけでクライアント書けた。

あとちゃんと試してないけど多分
ws.send binary_data, :type => :binary
でバイナリ送信できると思う。