mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - dRuby で分散処理!

[ プログラミング ] [ Ruby ]

こんばんは。

dRuby とは、 Ruby で分散オブジェクトプログラミングするためのライブラリです。

0. 前提条件

  • Linux Mint 17.2(64bit) での作業を想定。
  • Ruby 2.2.3-p173 での作業を想定。
  • 本来は複数のマシンで実行することが多いと思うが、今回は1つのマシンでテストする。
  • 特に別途インストールの必要なライブラリ等はない。

1. サーバ側スクリプトの作成例

日付・時刻の文字列を返すだけの簡単な例。

druby_server.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/local/bin/ruby
# coding: utf-8
require 'drb/drb'

# 通信を待ち受ける URI
URI="druby://localhost:8787"

class DrubyServer
  def get_cur_time
    cur_time = Time.now.strftime("%Y年%m月%d日 %H時%M分%S秒")
    msg = "ただいま #{cur_time} です。"
    puts msg
    return msg
  end
end

# リクエストを受け付けるオブジェクト
obj = DrubyServer.new
# サーバの起動
DRb.start_service(URI, obj, safe_level: 1)
# DRb スレッド終了の待ち受け
DRb.thread.join
  • start_servicesafe_level1 に設定しているのは、 instance_eval による危険性を防ぐための処置。

2. クライアント側スクリプトの作成例

サーバのメソットを呼び出す簡単な例。

druby_client.rb
1
2
3
4
5
6
7
8
9
10
11
#!/usr/local/bin/ruby
# coding: utf-8
require 'drb/drb'

# 接続先 URI
URI="druby://localhost:8787"

# リモートオブジェクトの取得
obj = DRbObject.new_with_uri(URI)
# リモートメソッドの呼び出し
puts obj.get_cur_time

3. 動作確認

まず、1つ目の端末を立ち上げて、サーバ側スクリプトを実行する。

1
$ ./druby_server.rb

そして、もう1つ端末を立ち上げて、クライアント側スクリプトを実行する。

1
2
3
4
$ ./druby_client.rb
ただいま 2015年07月22日 24時31分16秒 です。
$ ./druby_client.rb
ただいま 2015年07月22日 24時32分30秒 です。

クライアント側スクリプトを実行する度にサーバ側で処理した結果が出力されるはずである。
また、この時サーバ側の端末にも同じ出力がされるはずである。

1
2
3
$ ./druby_server.rb
ただいま 2015年07月22日 24時31分16秒 です。
ただいま 2015年07月22日 24時32分30秒 です。

4. 注意

  • dRuby で構築したサーバをインターネットで外部に公開すべきではない。
  • ローカルで使用する際もセキュリティ面に注意する。

5. 参考サイト


この dRuby による分散処理をいろいろ応用できそうです。

実際、目論んでいることもありますし。

以上。

Comments