Je viens de découvrir DRb (Distributed Ruby), une librairie incluse par défaut dans la distribution ruby (pas besoin de gem) pour faire du client/serveur.
Et alors me direz-vous ? Et bien c'est super simple !
Le mieux c'est un petit exemple:
Serveur:
require 'drb'
class MyServer
def say
"hello world"
end
end
DRb.start_service("druby://:7777", MyServer.new)
DRb.thread.join
Client:
require 'drb'
DRb.start_service
remote_object = DRbObject.new(nil, 'druby://localhost:7777')
puts remote_object.say
Résultat dans la console du client:
hello world
Quand je pense aux EJB en java et que je vois ça...
Petit bémole,
il faut redémarrer le serveur si on modifie la classe MyServer... mais si on utilise des blocks on peut éviter une partie de ce désagrément, exemple:
class MyServer
def say(&block)
yield
end
end
puts remote_object.say {"hello world"}
Rem: on coupe un peu les cheveux en quatre pour dire "hello world" mais bon c'est pour la démo hein ;)
Pour en savoir plus
quelques liens sur drb.
Attention l'exemple du tutorial de chad fowler sur les "songname" ne marche pas, il faut remplacer druby://hal9k:2001 par druby://localhost:7777.