2

ファイルからプラグイン システムを介してプレイヤーのボット コードを読み込む、Scala で書かれたオープンソースのマルチプレイヤー プログラミング ゲームの場合.jar、ボットのコードを制限付きで実行することにより、サーバー システムに害を及ぼさないようにしたいと考えています。SecurityManager実装。

現在の実装では、URLClassLoader を使用して、関連するプラグイン .jar ファイルから各ボットの制御関数ファクトリを抽出します。次に、ファクトリを使用して、ゲームの新しいラウンドごとにボット コントロール関数インスタンスをインスタンス化します。次に、シミュレーション サイクルごとに 1 回、すべてのボット コントロール関数が同時に呼び出され、環境に対するボットの応答が取得されます。Future.traverse()同時呼び出しは、暗黙的に提供ActorSystemされ、同時に動作する他のコンポーネント (コンパイル サービス、Web サーバー、レンダリング) によって共有されるAkka を使用して行われます。

val future = Future.traverse(bots)(bot => Future { bot.respondTo(state) })
val result = Await.result(future, Duration.Inf)

ボット プラグインに含まれる潜在的に悪意のあるコードの実行を制限するには、この StackOverflow の質問この質問で取られたパスに従って、適切に制限された実装の下で実行されるスレッドでボット制御機能を実行する必要があるようSecurityManagerです。

ここで問題です: システム内の他のアクタ(バックグラウンド コンパイル サービスを実行しているアクタなど) が現在と同じように実行し続けている間に、Akka が現在実行中の作業をFuture.traverse()目的の を持つスレッドで実行されているアクターで処理するにはどうすればよいでしょうか?つまり無制限?SecurityManager

4

1 に答える 1

0

ExecutionContext制限的なセキュリティ マネージャの下ですべての作業を実行する(たとえば、 を介して)のインスタンスを構築し、それをおよびExecutionContext.fromExecutorServiceの暗黙のスコープに入れることができます。Future.applyFuture.traverse

呼び出された関数が環境と対話する必要がない場合、別のActorSystem.

于 2012-05-04T15:21:56.197 に答える