我正在编写一个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其他进程吗?
答案 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地址。