【问题标题】:How to access common dll instance across nodejs processes in electron?如何在电子中跨nodejs进程访问通用dll实例?
【发布时间】:2019-01-03 17:29:04
【问题描述】:

我正在开发一个电子应用程序,由于主进程访问从 Golang 应用程序创建的 Dll 中的操作(使用 node-ffi),我遇到了渲染器进程阻塞的问题。 这些 DLL 方法是按顺序调用的,必须执行 DLL 的某些方法才能使其他方法起作用。

为了使在主进程中调用的这些执行不会阻塞渲染器,我使用了“electron-remote”(https://www.npmjs.com/package/electron-remote),它可以创建单独的进程(使用 requireTaskPool)。因此,在主进程中,我从 DLL 实例化 node-ffi 对象并从 ffi 对象执行某些方法。
但是在使用电子远程任务池创建的新进程中,DLL'd ffi 是一个新实例。此外,如果我们将 DLL 对象作为参数传递给使用电子远程创建的新进程,我们将得到一个空 DLL(没有对象属性)。

我是 nodejs 中并发处理的新手。有什么方法可以在使用子进程或电子远程分叉的其他进程中使用电子应用程序的主进程中从 dll 创建的 ffi 对象的相同实例?

【问题讨论】:

    标签: node.js multithreading electron child-process node-ffi


    【解决方案1】:

    有什么方法可以在电子应用程序的主进程中使用从 dll 创建的 ffi 对象的相同实例,并在使用子进程或电子远程分叉的其他进程中使用

    没有这样的方法。由于它是完全不同的进程,因此无法在不同进程之间共享单例实例。此外,预计将 DLL 对象传递给新进程会变为空,因为电子的 IPC 只允许传递可序列化的对象。

    简而言之,跨进程使用一个 ffi 对象的方式不是试图共享 ffi 对象,而是只有一个进程充当任务运行器,其他进程通过 IPC 调用请求/响应。

    【讨论】:

    • 使一个进程作为任务运行器,另一个进程通过IPC处理请求和响应,当可以通过将工作委托给后台进程来释放主进程时。但是想象一下我们需要通过释放主进程来运行多个后台进程(用于并行或并发)的情况。这里创建一个新进程会创建一个新的 ffi 对象,但我们真正需要的是同一个 ffi 对象实例。
    • 我知道你想要什么,但根本不可能。您实际上不能跨进程共享 ffi 对象的相同实例 - 您需要设计具有这些限制的应用程序。
    猜你喜欢
    • 2020-03-06
    • 2019-06-08
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2017-10-16
    • 2023-04-08
    相关资源
    最近更新 更多