rcomet

DESCRIPTION:

RComet is an implementation of the Bayeux protocol in Ruby. Bayeux Protocol : http://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.