Ruby - dRuby で分散処理!
Updated:
dRuby とは、 Ruby で分散オブジェクトプログラミングするためのライブラリです。
0. 前提条件
- Linux Mint 17.2(64bit) での作業を想定。
- Ruby 2.2.3-p173 での作業を想定。
- 本来は複数のマシンで実行することが多いと思うが、今回は1つのマシンでテストする。
- 特に別途インストールの必要なライブラリ等はない。
1. サーバ側スクリプトの作成例
日付・時刻の文字列を返すだけの簡単な例。
File: 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_service
のsafe_level
を1
に設定しているのは、instance_eval
による危険性を防ぐための処置。
2. クライアント側スクリプトの作成例
サーバのメソットを呼び出す簡単な例。
File: 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つ目の端末を立ち上げて、サーバ側スクリプトを実行する。
$ ./druby_server.rb
そして、もう1つ端末を立ち上げて、クライアント側スクリプトを実行する。
$ ./druby_client.rb
ただいま 2015年07月22日 24時31分16秒 です。
$ ./druby_client.rb
ただいま 2015年07月22日 24時32分30秒 です。
クライアント側スクリプトを実行する度にサーバ側で処理した結果が出力されるはずである。
また、この時サーバ側の端末にも同じ出力がされるはずである。
$ ./druby_server.rb
ただいま 2015年07月22日 24時31分16秒 です。
ただいま 2015年07月22日 24時32分30秒 です。
4. 注意
- dRuby で構築したサーバをインターネットで外部に公開すべきではない。
- ローカルで使用する際もセキュリティ面に注意する。
5. 参考サイト
この dRuby による分散処理をいろいろ応用できそうです。
実際、目論んでいることもありますし。
以上。
Comments