首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用给定的SecurityManager运行Akka未来?

如何使用给定的SecurityManager运行Akka未来?
EN

Stack Overflow用户
提问于 2012-05-04 10:17:46
回答 1查看 497关注 0票数 2

对于一个用Scala编写的开源多人编程游戏,它通过.jar文件中的插件系统加载玩家的bot代码,我想通过在限制性的SecurityManager实现下运行它们来防止机器人的代码对服务器系统造成危害。

当前的实现使用URLClassLoader从其相关的插件.jar文件中提取每个bot的控制函数工厂。然后,工厂用于为游戏的每一轮实例化一个bot控制函数实例。然后,每次模拟周期一次,同时调用所有bot控制功能,以获得bot对其环境的响应。并发调用使用Akka的Future.traverse()与其他并发操作组件(编译服务、web服务器、呈现)共享的隐式ActorSystem完成:

代码语言:javascript
复制
val future = Future.traverse(bots)(bot => Future { bot.respondTo(state) })
val result = Await.result(future, Duration.Inf)

为了限制包含在bot插件中的潜在恶意代码的运行,似乎按照this StackOverflow questionthis one中的路径,我需要在在适当限制的SecurityManager实现下运行的线程中执行bot控制函数。

现在的问题是:如何让Akka处理当前在Future.traverse()中完成的工作,在具有所需SecurityManager的线程中运行的角色,而系统中的其他Actor,例如那些运行后台编译服务的角色,继续像现在一样运行,即不受限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-04 15:21:56

您可以构造一个ExecutionContext实例(例如。通过ExecutionContext.fromExecutorService)运行所有在限制性安全管理器下的工作,并将其引入到Future.applyFuture.traverse的隐式范围中。

如果调用的函数不需要与环境交互,我认为您不需要单独的ActorSystem

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10446903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档