两个窗口之间的 Electron 应用程序 IPC 通信

4

Electron有一个名为ipcrenderer和ipcmain的IPC实现,它们是用于主进程通信的,但不能用于两个窗口之间的通信(即使传递emitter实例也不行)。

我认为,通过实际示例会更清楚(https://github.com/linuxenko/usprited)。我想把工具栏和主窗口设置为两个不同的窗口。唯一的问题是这两个窗口之间的通信,IPC不起作用,还没有尝试postmessage。您能推荐这种情况下使用哪种eventemitter实现进行Electron应用程序窗口之间的通信吗?

1个回答

1
我认为你选择的IPC方法将取决于你需要在窗口之间共享什么类型的数据以及你管理窗口的方式。例如,如果你从主进程管理窗口,你可以使用主进程作为中央枢纽,使用Electron的'ipc'模块传递消息。如果你的窗口彼此了解,最好直接在它们之间交换消息,而不经过主进程。
如果你使用Electron的window.open打开一个窗口,那么你可以在窗口代理上使用postMessage进行消息传递(在子窗口中,使用window.opener.postMessage)。
当然,你也可以在两个窗口之间打开一个套接字或使用任何其他形式的IPC,特别是如果你需要传递大量数据。对于简单的消息和事件,postMessage应该足够了。

谢谢@inukshuk,通过主进程进行类似中心通信的方式看起来更加真实,我会尝试一下。请问,“两个窗口之间的套接字”是什么意思?没有服务器也可以吗?WebRTC?如果可以,请指导我如何实现它,这看起来是一个非常有前途的解决方案。 - Svetlana Linuxenko
我的意思是打开一个Unix套接字(如果您不支持Windows)或网络套接字...其中一个进程必须扮演服务器。我之前没有考虑过WebRTC,但如果您想要流式传输视频或音频,那可能是一个非常酷的想法...使用Electron可以做很多很酷的事情。 - inukshuk
啊,现在我明白了,谢谢你) - Svetlana Linuxenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接