リンダとDRB技術が説明(準備中...)

DRB(Rubyの分散)は、リモート呼び出しのルビーライブラリで、それを使用するには、リモートでのオブジェクトと同じアクセスのようなローカルオブジェクトを呼び出すことができます。

DRBを使用するには、どのように次のコードに示します。

#サーバー
が必要です'DRB'
クラスTESTSERVER
  DEF追加(*引数)
    args.inject {| N - 、V | V} + N-
  エンド
エンド
サーバー= TestServer.new
DRb.start_service( 'druby:// localhostを:9000'、サーバー)
!まだない出口DRb.thread.join#

クライアント
が必要です'DRB'
DRb.start_service()
OBJ = DRbObject.new(nilに、 'druby:// localhostを:9000')
今#objが使用
プットを"合計である:#{obj.add(1 、2、3)} "

コードDRBのわずか数百行を達成します。
技術は、Java JNIのJavaSpacesテクノロジー、および技術ベースのJavaSpacesリンダ、DRB用具の作者に基づいている
リンダリンダののRubyのバージョンと呼ばれます。

リンダは、分散シナリオ間のコラボレーションのプロセスを実現します。
基本的な操作対象は、リンダのタプルです。
読むのタプルは標準サイズがタプルの要素の内容が一致するかどうかで、タプルかもしれかもしれません。

DRBサービス/クライアントがお互いを見つけることができるようにすることであるRingServer。

リンダのためのコードのアン例:
#########リンダサーバー
が必要です「DRB / DRB」
必要「リンダ/ tuplespace」
必要「リンダ/リング」

DRb.start_serviceの
tuple_spaceリンダTupleSpace.new :: =
ring_serverリンダ:: = RingServer.new tuple_space
trueにしながら、
   MSG =取得
   tuple_space.write [:メッセージ、MSG]
エンド

#########リンダクライアント
'DRB / DRB'必要
必要"リンダ/ tuplespace '
必要'リンダ/リング"

DRb.start_service
tuple_spaceリンダ:: = RingFinger。
trueにしながら、
   プットの「メッセージ:」+ tuple_space.take([:メッセージはnil])[1]
エンド

問題:
1、しかし、クライアントはタプルを複数行う必要はありません
2を、クライアントが別のマシンのringserverを見つけることができません。
3。声明は、メッセージを取得するためにテイクを削除されますが、新たに書き込まれたタプルは古いタプルを上書きすることはできません。場合

RingServer android.permissionリンダ::経由UDPブロードキャストにtuplespace位置するブロックは。さ

、この問題を解決することができ、使用RingServer、RingFinger確かに他の放送によるUDPパケットを見つけることができます
RINDAサービスを。しかし、明示的にDRBサービスのURIにバインドします。

 
公開された46元の記事 ウォン称賛7 ビュー80000 +

おすすめ

転載: blog.csdn.net/yangbo_hr/article/details/1965662