WebSocket Rack
Rack-based WebSocket server
Usage
Create sample rack config file, and inside build app basing on Rack::WebSocket::Application.
require 'rack/websocket'
class MyApp < Rack::WebSocket::Application
end
map '/' do
run MyApp
end
After that just run Rack config from Rack server:
thin -R config.ru start
Done.
Configuration
Rack::WebSocket::Application make following methods available:
on_open
Called after client is connected.
Example:
class MyApp < Rack::WebSocket::Application
def on_open
puts "Clien connected"
end
end
on_close
Called after client is disconnected
Example:
class MyApp < Rack::WebSocket::Application
def on_close
puts "Clien disconnected"
end
end
on_message(msg)
Called after server receive message
Example:
class MyApp < Rack::WebSocket::Application
def (msg)
puts "Received message: " + msg
end
end
on_error(error)
Called after server catch error. Variable passed is instance of Ruby Exception class.
Example:
class MyApp < Rack::WebSocket::Application
def on_error(error)
puts "Error occured: " + error.
end
end
send_data(data)
Sends data do client.
Example:
class MyApp < Rack::WebSocket::Application
def on_open
send_data "Hello to you!"
end
end
Available variables:
@env
Rack env - contain all data sent by client when connectind.
@conn
Connection - thin wrapper between client and EventMachine::Connection
FAQ
Which Rack servers are supported?
Currently only Thin. I plan to support also Rainbows! in future, but not yet.
Why (using Thin) user is disconnected after 30 seconds?
This is bug in EventMachine < 1.0.0. Please consider updating to newer version or use thin-websocket wrapper around thin binary.
How to enable debugging?
Just use :websocket_debug => true option when initializing your app.
How to enable wss/SSL support?
Thin v1.2.8 have --ssl option - just use that! :)
How to use function xxx?
Check Thin config - any option supported by Thin(like demonizing, SSL etc.) is supported by WebSocket-Rack.
About
Author: Bernard Potocki <[email protected]>
Most source taken from em-websocket
Released under MIT license.