mercredi, juin 06, 2007

DRb alias Distributed Ruby

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.

Technorati tags:

2 commentaires:

Anonyme a dit…

Sujet vraiment intéressant, merci pour l'info, ça change de CORBA et compagnie :)

Unknown a dit…

Effectivement drb est super sympa ... mais c'est encore mieux quand on utilise backgroundrb !!!! et son plugin pour rails !!!
Personnellement, je l'utilise comme moteur de job pour encoder des videos ala Youtube sur mon prochain site web (qui devrait être en ligne ce week-end)
Backgroundrb c'est par ici

julien