我刚刚开始学习Scala中的Akka Actors.我的理解是,Actor接收的消息在Actor的邮箱中排队,并且一次处理一个.通过一次处理一个消息,可以减轻并发问题(竞争条件,死锁).
但是如果Actor创建了一个与消息相关的工作的未来会发生什么?由于未来是异步的,因此Actor可以开始处理接下来的几条消息,而与先前消息相关联的未来仍然在运行.这不会产生竞争条件吗?如何在Actor的receive()方法中安全地使用future来执行长时间运行的任务?
我想允许用户从浏览器客户端提交Java/Scala源代码并在服务器上编译/执行它.但是,与此同时,我想限制用户在服务器上运行潜在的恶意代码.
例如,我想阻止文件系统访问以及提交的源代码的入站/出站网络访问.我还应该限制什么?
我应该明确禁止哪些Java/Scala库用于客户端?例如,这是我的不允许的API /库列表:
java.lang.System
java.lang.Runtime
java.io.*
java.nio.*
scala.io.*
java.net
Run Code Online (Sandbox Code Playgroud)
如何正确沙箱不受信任的Java/Scala代码?
我在 Scala 中创建了以下 Akka Actor 代码。创建单个 workerActor 时,代码工作正常。但是当我尝试使用循环逻辑创建一个工作人员池时,代码默默地失败了。知道如何解决这个问题吗?如何获得更多要打印的调试信息?
import scala.collection.immutable.Map
import scala.collection.mutable.ArrayBuffer
import akka.actor.actorRef2Scala
import akka.actor.ActorSystem
import akka.actor.Props
import scala.concurrent.Await
import scala.concurrent.duration._
import akka.pattern.ask
import akka.util.Timeout
import akka.actor._
import org.junit._
import org.junit.Assert._
import messaging.actors._
import akka.routing.RoundRobinRouter
import akka.routing._
class MainEngineActorTest {
@Test
def testMainActor () = {
val _system = ActorSystem("MainEngineActor")
val master = _system.actorOf(Props[MainEngineActor], name = "EngineActor")
println ("Created Main Engine Actor")
implicit val timeout = Timeout(5 seconds)
val userID = new UserID ("test1")
println ("Sending messages")
for (i …Run Code Online (Sandbox Code Playgroud)