Electron IPC模块的更快替代品

时间:2019-02-08 10:54:16

标签: performance electron

我正在编写一个Electron应用程序,该应用程序需要每隔约25毫秒从渲染器向使用本地fork模块在​​主进程中启动的单独Node进程发送一些数据。

数据看起来像这样:[{ x: int, y: int }, ...],其中大约有1000个点(为简洁起见,此处显示的信息更多)。

我开始在渲染器过程中使用ipc.send,但是它会带来严重的性能损失:每个ipc.send都需要4.25毫秒。

因此,我研究了在派生的Node进程中使用ws npm包启动WebSocket,并使用JSON通过WebSocket发送数据。这样好多了。甚至通过使用avsc而不是解析为JSON(从〜4ms到〜1ms)进一步改进了它。

因此,WebSocket解决方案运行良好,但是存在一个问题:它需要找到一个空闲端口并通过本地网络。在macOS中,这还会触发一个对话框:

  

您是否希望应用程序“ x.app”接受传入的网络连接?

如果可能的话,我希望避免这种对话框以及使用本地网络的棘手问题。

我的问题是:有人知道更好的解决方案将数据发送到不在本地网络中传输的Electron其他进程吗?

1 个答案:

答案 0 :(得分:1)

  

因此,WebSocket解决方案运行良好,但是存在一个问题:它   需要找到一个空闲端口并通过本地网络。在macOS中   还会触发一个对话框:...

您是否使用回送地址?环回地址永远不需要网络确认。在我的本地ws electronic项目中,我使用127.0.0.1:port而不是localhost,这将完全绕过Internet安全对话框。只要在Linux / MacOS上添加适当的回送接口,就可以使用其他127.x.x.x地址。在Windows上,默认情况下已添加127.x.x.x。

  

我的问题是:有谁知道一种更好的解决方案,可以将数据发送到不在本地网络中传输的Electron其他进程?

Electron可以使用IPC,RPC或基于网络的通信技术。您已经体验过IPC(RPC非常相似)。以我的经验来看,最快的是基于网络的技术。我的经验与您的经历非常相似,因为网络套接字使竞争消失了。基于网络的通信技术人员永远不要触发LAN / WAN / ISP安全措施,除非他们使用LAN / WAN / ISP地址。