Simple pub/sub messaging for the web

Ruby server

Server-side Ruby clients

You can use Faye clients on the server side to send messages to in-browser clients or to other server-side processes. The API is identical to the browser client.

To create a client, just supply the host you want to connect to:

client = Faye::Client.new('http://localhost:9292/faye')

You can then use client.subscribe() and client.publish() to send messages to other clients; the API is similar to the browser client only you need to run the client inside EventMachine:

require 'eventmachine'

EM.run {
  client = Faye::Client.new('http://localhost:9292/faye')

  client.subscribe('/foo') do |message|
    puts message.inspect

  client.publish('/foo', 'text' => 'Hello world')

Note that the Ruby client uses EventMachine::Deferrable instead of promises, for example you detect success and failure of a publication like so:

publication = client.publish('/foo', 'text' => 'Hello world')

publication.callback do
  puts 'Message received by server!'

publication.errback do |error|
  puts 'There was a problem: ' + error.message

If you need to set custom headers to talk to your Bayeux server, use the set_header method:

client.set_header('Authorization', 'OAuth abcd-1234')

The server has its own client attached to it so you can use the server to send messages to browsers. This client has direct access to the server without going over HTTP, and is thus more efficient. To send messages through the server just use the #get_client method.

bayeux.get_client.publish('/email/new', {
  'text'      => 'New email has arrived!',
  'inboxSize' => 34