[ANN] Sunshowers - Web Sockets for Ruby, Rack+Rainbows!

E

Eric Wong

Sunshowers is a Ruby library for Web Sockets. It exposes an easy-to-use
API that may be used in both clients and servers. On the server side,
it is designed to work with Rack::Request and Rainbows! concurrency
models that expose a synchronous application flow. On the client side,
it may be used as a standalone wrapper for IO-like objects.

* http://rainbows.rubyforge.org/sunshowers/
* (e-mail address removed)
* git://git.bogomips.org/sunshowers.git

It appears works well with the echo_client.py example shipped with
pywebsocket. It has not been tested against normal web browsers, though
there's no reason it shouldn't work.

== Features

* supports reads and writes of both UTF-8 and binary Web Socket frames

* compatible with Revactor, Rainbows::Fiber::IO and core Ruby IO objects

* pure Ruby implementation, should be highly portable, tested under 1.9

== Install

You may download the tarball from the Rainbows! project page on Rubyforge
and run setup.rb after unpacking it:

http://rubyforge.org/frs/?group_id=8977

You may also install it via RubyGems on Gemcutter:

gem install sunshowers

== Usage

Make sure you're using one of the following concurrency models
for Rainbows!:

* FiberSpawn
* FiberPool
* Revactor
* ThreadSpawn
* ThreadPool

# A simple echo server example
require "sunshowers"
use Rack::ContentLength
use Rack::ContentType
run lambda { |env|
req = Sunshowers::Request.new(env)
if req.ws?
req.ws_handshake!
ws_io = req.ws_io
ws_io.each do |record|
ws_io.write(record)
break if record == "Goodbye"
end
req.ws_quit! # Rainbows! should handle this quietly
end
[404, {}, []]
}

Already using a Rack::Request-derived class? Sunshowers::WebSocket may
also be included in any Rack::Request-derived class, so you can just
open it up and include it:

class Sinatra::Request < Rack::Request
include Sunshowers::WebSocket
end

See the examples/ directory in the source tree for a client example.
 
E

Eric Wong

Sunshowers is a Ruby library for Web Sockets. It exposes an easy-to-use
API that may be used in both clients and servers. On the server side,
it is designed to work with Rack::Request and Rainbows! concurrency
models that expose a synchronous application flow. On the client side,
it may be used as a standalone wrapper for IO-like objects.

* http://rainbows.rubyforge.org/sunshowers/
* (e-mail address removed)
* git://git.bogomips.org/sunshowers.git

Changes:

This release contains a small bugfix to generate the
WebSocket-Location headers correctly. Thanks to Lakshan Perera
for the report and fix.
 
E

Eric Wong

Sunshowers is a Ruby library for Web Sockets. It exposes an easy-to-use
API that may be used in both clients and servers. On the server side,
it is designed to work with Rack::Request and Rainbows! concurrency
models that expose a synchronous application flow. On the client side,
it may be used as a standalone wrapper for IO-like objects.

* http://rainbows.rubyforge.org/sunshowers/
* (e-mail address removed)
* git://git.bogomips.org/sunshowers.git

Changes:

The ws_handshake! method now accepts optional headers, as
cookies should be settable during the handshake process. Header
rules are exactly the same as normal Rack response headers and
typically a Hash with String keys and newline-delimited values.

Sunshowers::IO#gets now discards binary frames as dictated by
the current IETF draft specification (66). Setting
Sunshowers::IO#keep_binary=true will revert to the old (and
hopefully future) behavior on a per-object basis. Do not expect
the +keep_binary+ member of Sunshowers::IO Struct to become part
of the a stable API.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,045
Latest member
DRCM

Latest Threads

Top