rgossip2
Description
Basic implementation of a gossip protocol.
This is a porting of Java implementation.
see code.google.com/p/gossip-protocol-java/
Install
gem install rgossip2
Example
require 'rubygems'
require 'rgossip2'
gossip = RGossip2.client(
:initial_nodes => ['10.150.174.161', '10.150.185.250', '10.150.174.30'],
:auth_key => 'onion'
)
gossip.data = 'Node 01: data'
gossip.start
#gossip.join
loop do
case gets
when /list/i
gossip.each do |address, , data|
puts "#{address}: #{data}"
# (example output)
# 10.150.174.161: node-1
# 10.150.174.30: node-3
# 10.150.185.250: node-2
end
when /^add\s+(.+)$/
gossip.add_node $1
end
end
Command-line interface
shell> gossip
I, [2011-10-30T22:41:05.975084 #2282] INFO -- : Client is initialized: initial_nodes=[], address=10.142.43.53, data=nil
gossip> add ip-10-142-30-230
gossip> list
IP Address Timestamp Data
--------------- -------------------------- ---------------------------
10.142.43.53 2011/10/30 22:41:05.000000
10.142.24.230 1970/01/01 09:00:00.000000
gossip> start
I, [2011-10-30T22:41:22.083898 #2282] INFO -- : Client is started: address=10.142.43.53
I, [2011-10-30T22:41:22.084197 #2282] INFO -- : Transmission was started: interval=0.1, port=10870
I, [2011-10-30T22:41:22.084580 #2282] INFO -- : Reception is started: port=10870
gossip> list
IP Address Timestamp Data
--------------- -------------------------- ---------------------------
10.142.43.53 2011/10/30 22:41:24.000000
10.142.24.230 2011/10/30 22:41:23.000000
gossip> data my data
gossip> list
IP Address Timestamp Data
--------------- -------------------------- ---------------------------
10.142.43.53 2011/10/30 22:41:30.000000 my data
10.142.24.230 2011/10/30 22:41:30.000000