Skip to content

kikan/shower

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shower

Shower allows the creation of an unlimited number of event streams through a single connection! Server side events have never been easier and more efficient. Since there is no needed to persist a database connection, the amount of concurrent users is only limited by your Rails server.

Requirements

Multithreaded Server

As with any application wishing to use ActionController::Live, a multithreaded server is required. I recommend, Puma, it's open source and free. Passenger Enterprise is another option, it's a little simpler to setup then Puma.

Redis

A Redis server must be installed and running. Messages are pushed to a Redis server, where the Shower::StreamController then picks them up and pushes them to the event stream. Because of this, the event stream does not need a database connection!

Installation

Add this line to your application's Gemfile:

gem 'shower'

And then execute:

$ bundle

After bundling you need to run the initial installation generator for javascript client usage:

$ rails g shower:install

Configuration

Create config/initializers/redis.rb and configure Redis connection:

$redis = Redis.new(host: '127.0.0.1', port: 6379)

Usage

Publishing

Pushing messages to an event stream is simple, just pass the event name and the data. The data will be converted to JSON using to_json.

Shower::Stream.publish('message.new', { username: 'anon', message: 'hello!' })

Subscription

Subscribing to an event stream on server side.

Shower::Stream.subscribe(['message.new']) do |event, data| 
  # do something with event
  # do something with data
end

Listening

To listen for messages, use the JavaScript Shower class. The constructor takes the path and an array of events.

stream = new Shower('/stream', ['message.new', 'alert.new'])

Now define a callback for each event.

stream.addEventListener('message.new', (event) ->
  message = JSON.parse(event.data)
  console.log 'new message:'
  console.log message
)

stream.addEventListener('alert.new', (event) ->
  alert(event.data)
)

Contributing

  1. Fork it ( https://github.com/[my-github-username]/rails_script/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

Rails JSON Streaming

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 73.3%
  • HTML 19.7%
  • CSS 2.8%
  • JavaScript 2.4%
  • CoffeeScript 1.8%