rcomet

DESCRIPTION:

RComet is an implementation of the Bayeux protocol in Ruby. Bayeux Protocol : svn.cometd.org/trunk/bayeux/bayeux.html

FEATURES/PROBLEMS:

  • It was tested only with Dojo

  • Does not work with Thin :(

SYNOPSIS:

Server

require 'rcomet/server'

# We create a new RComer server
server = RComet::Server.new( :host => '0.0.0.0', :port => 8990, :server => :mongrel, :mount => '/' ) {
  # We create a new channel (/graph) with a callback to manipulate recieved data
  channel['/graph'].callback do |message|
    # Someone have send data on channel /graph
    # We push the data message to the same channel
    # We don't need to do this... But it's an example
    channel['/graph'].data( message['data'] )
  end
}

# Let's start the server
server.start

# Then we start for a infinity loop
while true
  # We push new data to the channel /graph every 5 second
  server.channel['/graph'].data( [rand(10),rand(10),rand(10),rand(10),rand(10),rand(10),rand(10),rand(10)] )
  sleep(5)
end

Client

require 'rcomet/client'

# Initialisation
x = RComet::Client.new( 'http://localhost:8990/' )

# Handshake
x.handshake

# Publication
x.publish( '/login', "daemon" );

# Subscriptions
x.subscribe( "/from/greg" ) { |r|
  puts "#{r["username"]} : #{r["message"]}"
}
x.subscribe( "/from/daemon" ) { |r|
  puts "#{r["username"]} : #{r["message"]}"
}

# Connection
x.connect

# Mainloop
msg = ""  
while msg != "quit"
  msg = $stdin.readline.chomp
  unless msg == "quit"
    channel = "/from/daemon"
    data = { "username" => "daemon", "message" => msg }
    r = x.publish( channel, data )
    unless r["successful"]
      puts "=> Message not send !"
    end
  end
end

x.disconnect

More…

See examples

REQUIREMENTS:

  • json

  • rack

INSTALL:

gem install rcomet

LICENSE:

RComet is freely distributable according to the terms of the GNU General Public License.

This program is distributed without any warranty. See the file ‘LICENCE’ for details.