Raspberry Pi2(以下ラズパイ)みたいな小型デバイスに、メインの処理を分散処理させると面白いだろうということで、標準で入っているRubyを使って、テストしてみました。
NSProxy / NSConnection
http://decode.red/net/archives/117
Remote Procedure Call
http://decode.red/net/archives/104
前に、Objective-CとCでも似たことをしましたが、Rubyは分散処理ライブラリdRubyがすぐ使える環境にあり、とても簡単に実現できます。
リクエストを処理するサーバ側をラズパイ、クライアント側はCygwin/Windows 8.1を使いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
require 'drb/drb' class Serv def get_time return Time.now end def send_msg(msg) puts msg end end obj = Serv.new DRb.start_service("druby://192.168.11.111:2525", obj, :safe_level => 1) DRb.thread.join |
サーバ側に現在時間の取得と、メッセージの送信をするメソッドを用意。
1 2 3 4 5 6 7 8 |
require 'drb/drb' DRb.start_service serv = DRbObject.new_with_uri("druby://localhost:2525") puts serv.get_time serv.send_msg('12345') |
サーバ側のめメソッドをライアント側から呼び出します。
リモートであることを意識させないところがいいです。
以下、実行結果。
サーバを起動してからクライアントを実行します。
パケットキャプチャ
(ラズパイに、tcpdumpインストール : apt-get install tcpdump)
安価なラズパイを数台使って重い処理を分散処理させるのも面白そうです。
参考: http://docs.ruby-lang.org/ja/1.8.7/library/drb.html