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 on_message(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.message
  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.