Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Simple server push implementation using eventmachine and long polling
JavaScript Ruby
tree: 8b8217ac59

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
config
lib
public
spec
.gitignore
LICENSE
README.md
Rakefile
config.ru
puggernaut.gemspec
puggernaut.png

README.md

Puggernaut

Simple server push implementation using eventmachine and long polling.

Puggernaut

Requirements

gem install puggernaut

How it works

Puggernaut consists of four pieces:

  • TCP client to send push messages
  • TCP server to receive push messages
  • TCP server to deliver messages via WebSockets (em-websocket)
  • HTTP server to deliver messages via long poll

Start it up

Run the puggernaut binary with optional port numbers:

puggernaut <http port> <tcp port> <tcp port (websocket)>

The default HTTP and TCP ports are 8100, 8101, and 8102, respectively.

Set up proxy pass

Set up a URL on your public facing web server that points to the Puggernaut HTTP server (long poll).

We all use Nginx, right?

nginx.conf

server {
    location /long_poll {
      proxy_pass http://localhost:8100/;
    }
}

Send push messages

require 'puggernaut'

client = Puggernaut::Client.new("localhost:8101", "localhost:9101")
client.push :channel => "message"
client.push :channel => [ "message 1", "message 2" ], :channel_2 => "message"

The Client.new initializer accepts any number of TCP server addresses.

Receive push messages

Include jQuery and puggernaut.js into to your HTML page.

Javascript client example:

Puggernaut.path = '/long_poll'; // (default long poll path)
Puggernaut.port = 8102;         // (default WebSocket port)

Puggernaut
  .watch('channel', function(e, message) {
    // do something with message
  })
  .watch('channel_2', function(e, message) {
    // do something with message
  });

Puggernaut.unwatch('channel');

Running specs

Specs are a work in progress, though we can vouch for some of the functionality :).

Set up Nginx to point to a cloned copy of this project:

nginx.conf

server {
    listen 80;
    server_name localhost;
    root /Users/me/puggernaut/public;
    passenger_enabled on;
    
    location /long_poll {
        proxy_pass http://localhost:8100/;
    }
}

You have now set up an instance of Puggernaut's spec server.

Start up an instance of Puggernaut by running bin/puggernaut.

When you visit http://localhost you will find a page that executes QUnit specs.

Something went wrong with that request. Please try again.