Ever thought it would be nice to call objects located anywhere in the
world, without bothering with static IPs, DNS, Apache, CGI, NAT, PAT,
gateways, authentication, and so on?

Jabber-RPC lets you do this.  On the callee side you have:

  require "jabber/rpc"

  class TestAgent < Jabber::RPC::BasicAgent
    def exposed_commands
      ["alive?"]
    end

    def alive?
      true
    end
  end

  agent = TestAgent.new("bot / jabberserver.com/TestAgent", "bot")
  agent.connect


On caller, you have:

  session = Jabber::Session.bind("user@jabberserver/Ruby", "user")
  remote_agent = Jabber::RPC::Client.new(session, "bot / jabberserver.com/TestAgent").proxy3
  remote_agent.alive?  #=>  true


And with a bit more code, remote users can talk to the object through
an IM client, too.

Find it at: http://jabber-rpc.rubyforge.org


Massimiliano