ホーム DoRuby dRubyについて

dRubyについて

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちわ。wryyyです。

久しぶりのブログ更新です。

さて、今回はRubyのメソッドを拡張したdRubyについて書いていきたいと思います。

【dRubyとは何か?】

Rubyのメソッド呼び出しを拡張し、ネットワーク越しにメソッド呼び出しを行なえるようにするライブラリです。

【Hello, dRuby】

では、実際に「習うより慣れろ!」ということで、早速「Hello, dRuby」を印字するプログラムを見ていきましょう。

※実際の動作確認ではターミナルを2つ使用します。

<ターミナル1>
#server.rb require 'drb/drb' class Puts def initialize(stream=$stdout) @stream = stream end def puts(str) @stream.puts(str) end end uri = ARGV.shift DRb.start_service(uri, Puts.new) puts DRb.uri sleep

上記プログラムは、サーバとなります。

サーバを起動させてみます。

ruby puts.rb druby://localhost:12345

続いてクライアント側で実験をしていきたいと思います。

<ターミナル2>
irb irb(main):001:0> require 'drb/drb' => true

irbからまず始めにdrbをrequireします。続いて

irb(main):002:0> there = DRbObject.new_with_uri('druby://localhost:12345') 
=> #

DRbObject.new_with_uri はURIを指定してオブジェクトの参照を返します。

引数にはサーバ側で指定したURIを指定します

irb(main):003:0> there.puts('Hello, World.') 
=> nil

putsでサーバ側に「Hello, World」を入力しました。

サーバ側で「Hello, World」が入力されているか確認してみましょう。

<クライアント1>
druby://localhost:12345
Hello, World.

どうでしょう?サーバ側で「Hello, World」が確認できたでしょうか?

お分かりの通り、dRubyはクライアント側からサーバ側のメソッドを読み出し、サーバ側で処理を行わせることができるのです。

ここまでのやり方ですと、クライアント側はirbで実行させましたが

rubyのスクリプトを書いて実行させることも、もちろんできます。

#client.rb
require 'drb/drb'

uri = ARGV.shift
there = DRbObject.new_with_uri(uri)
there.puts('Hello, World')

上記スクリプトはirbで以前に打ったものとほぼ一緒ですね。

実際にclient.rbを実行させてみましょう。

<ターミナル2>
ruby client.rb druby://localhost:12345
<ターミナル1>
Hello, World

と表示されるはずです。

このようにサーバとクライアントを分けて、ネットワーク越しにメソッドを呼び出し

処理を行えます。

ここまで、単純な形でしたが、これ以外にもスレッド処理等複雑な処理も

行えますので、お試しください。

記事を共有

最近人気な記事