En un ejemplo cliente/servidor, el servidor es una instancia de una clase que contiene los métodos que queremos ejecutar de forma remota. Además de eso tan solo tenemos que elegir a qué clientes escuchamos y en qué puerto.
require 'rubygems'
require 'msgpack/rpc'
class RemoteServer
def printer(arg)
puts "Printing: #{arg}..."
return true
end
end
server = MessagePack::RPC::Server.new
server.listen('0.0.0.0', 8888, RemoteServer.new)
server.run
Un cliente que se conecte al servidor anterior sería el siguiente.
require 'rubygems'
require 'msgpack/rpc'
client = MessagePack::RPC::Client.new('127.0.0.1', 8888)
called = client.call_async(:printer, 'message')
result = called.get
La llamada call_async hace que se ejecute el método de forma asíncrona, si necesitamos el valor devuelto por la función será necesario llamar a get que se asegura de la terminación del método y de recoger el resultado.
También se puede ejecutar código de forma síncrona con call.
Además, la librería permite crear sesiones para reaprovechar las conexiones con el servidor.
require 'rubygems'
require 'msgpack/rpc'
session_pool = MessagePack::RPC::SessionPool.new
client = session_pool.get_session('127.0.0.1', 8888)
result = client.call(:printer, 'message')
0 comentarios:
Publicar un comentario