【问题标题】:Sandboxed Plugin architecture沙盒插件架构
【发布时间】:2011-11-22 05:44:38
【问题描述】:

我在谷歌上搜索并搜索插件架构,我对如何实现它的一般知识感到满意。现在我进一步寻找沙盒架构。基本上我的意思是一个带有插件的应用程序,其中插件崩溃不会导致整个应用程序崩溃,并且可以重新加载插件。 我找不到好的文档。 我知道 Firefox 实现了它(崩溃的 flash 插件不会影响整个 FF 的东西,可以重新加载) 谢谢!

【问题讨论】:

  • 我认为你需要插件在自己的进程中运行,这样它就不会在主机应用程序崩溃时崩溃。不过,这要求插件和宿主应用程序之间的通信是进程间通信。
  • @sbi,这应该是一个答案
  • @bdonlan:不,这不值得。 (去吧,如果你想。)
  • @sbi,但是如果我有 20 个插件,那就是 20 个进程。这不是资源开销以及进程间通信吗? AFAIK,流程很难共享资源
  • @Stefano:共享资源是潜在的故障点。如果插件损坏了某些东西,并且它被隔离了,那你就没事了。如果插件损坏了某些东西,并且它与主应用程序共享,那么您将陷入痛苦的世界。

标签: c++ sandbox plugin-architecture


【解决方案1】:

Google's native client technology 可能比您要查找的内容更全面,但可能值得一读。

【讨论】:

    【解决方案2】:

    要想拥有一个真正的沙盒架构,其中插件不能直接使父应用程序的进程崩溃或破坏其内存,唯一的方法是将其置于具有单独内存空间的单独操作系统进程中。执行此操作时,您将需要依赖操作系统的进程间通信设施(管道、套接字、远程过程调用、内存映射文件、共享内存、同步对象等)与插件进行交互。

    【讨论】:

    • 当插件很多时会使应用程序变得复杂。假设有 20 个插件和所有内存空间和进程间通信。至少如果有两个进程运行一个托管所有插件和其他核心应用程序。
    • 是的,如果插件可以潜在地相互交互,那么您可以为所有插件使用一个插件宿主进程。如果它死了,它可能会使插件主机的恢复更加复杂 - 使用 Firefox 比较,这意味着如果插件行为不端并取消托管进程,所有使用任何插件的打开页面都会有以某种方式重置,而不是可能仅重置一个页面/插件实例。
    • 嗯!我认为没有什么比你在你的答案中所拥有的方法了。在我接受它作为答案之前,让我等待是否有任何其他选择。谢谢vercellop
    • 我认为这是我所看到的实用的解决方案!谢谢大家!
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多