1

Scala では、alive(0) を使用してリモート アクターを登録すると、アクターはランダムなポートに登録されます。次のように登録できます: act メソッドで register('fooParActor, self) 。

これで、マスター/サーバー側で、ポートを指定してアクターを選択できます。ランダム ポートを使用するには、手動でポートをスキャンする必要がありますか?

私が解決しようとしている問題は、ノード上に n 個のアクターを作成し、マスター/サーバー プログラムでそれらをすべて選択することです。たとえば、ノード x で 10 個のスレーブを起動し、ノード y で 10 個のリモート アクターのリストを取得します。

これはどのように行われますか?

4

2 に答える 2

1

アクター用にさまざまなポートを登録する必要はありません。代わりに、アクター システム全体に 1 つのポートが必要です。より正確には akka カーネル (サーバーも認識する必要があります)。このすべてがどのように機能するかについては、ドキュメントのこのページを参照してください。

リモート アクターを選択するには、次のように、リモート アクター システム内のパスを介してルックアップできます。

context.actorFor("akka://actorSystemName@10.0.0.1:2552/user/someActorName/1")

その場合、アクターnをそのアクターの子として作成し、someActorNameそれらに名前1を付けます (そのため、nなどを介して他のアクターを取得できます)。.../someActorName/2.../someActorName/3

ここでは何もランダム化する必要はありません。問題をどのように説明したかを考えると、その中でランダム化する必要もありません。単純に 10 人のアクターを開始し、1 から 10 までの番号を付けます。乱数を使用すると、必要以上に複雑になります。

本当にランダムなポートについては、sourcedelica にしか同意できません。ランダムなものを通信するための固定ポート、またはその他の通信方法が必要です。ランダムなポートが原因で通信先がわからない場合は、単に機能しません。

于 2013-02-04T12:39:26.793 に答える
0

よく知られているポートを持つActorSystemが少なくとも1つ必要です。次に、他のActorSystemsはポート0を使用して、Akkaにランダムなポートを割り当てさせることができます。スレーブActorSystemsは、すべてのリモートシステムを認識できるように、アクターをマスター上のアクターに登録します。

マスターにランダムポートを使用させる必要がある場合は、そのポートを帯域外で通信する必要があります(共有ファイルシステムまたはデータベースを使用)。

于 2013-02-06T16:18:03.210 に答える