使用Electron(Atom Shell)时,客户/服务器模型是什么?

我试图围绕Electron (以前的Atom Shell)是如何工作的。

我来自传统的MVC风格的Web应用程序,浏览器通过路由系统调用控制器动作 ,然后控制器从存储(文件系统,数据库…)中提取数据,并呈现一个视图 ,这被发送回浏览器。 有些操作可能会返回JSON,因为它们是通过JavaScript / AJAX调用的,而不是实际导航到浏览器的浏览器。

我想创build,但作为一个跨平台的桌面应用程序。 我知道Atom Shell结合了一个Chromium浏览器和一个Node.js / v8运行时,但我不确定他们将如何进行通信。

我想我可以在Web服务器上运行一个完整的服务器(基本上是一些像Express一样的Node.js HTTP中间件),但是这会创build一个networking可达的服务器(这也可能会使防火墙绊倒) – 我想制作桌面的一个原因应用程序正是为了避免运行真正的服务器。 基本上像“普通”桌面应用程序中的MVP / MVVM模式。

有人能给我几个我想要做的事情的起点吗? 浏览器如何与节点运行时(“客户端”,因为他们称之为)通话?告诉它“嘿,获取我的logging与ID 12345”,并将客户端返回呈现的HTML,或浏览器只是得到一个blob的JSON回来,并通过JavaScript模板引擎呈现?

Electron似乎并没有使用Node.js作为Web服务器,而只是作为运行后台JavaScript代码的环境,此代码可以使用节点模块来访问系统。 与此同时,Chromium为应用程序提供了一个用户界面,它显示了运行常用沙盒JavaScript的常规网页。 两者都由Electron可执行文件embedded,前者直接(Node.js可以构build为静态库),后者通过libchromiumcontent 。 在某种程度上,Node.js是应用程序的控制器部分,而Chromium是视图。

通常,这里用于网页的概念是单页面应用程序的概念 :网页代表一个应用程序窗口,只要这个窗口可见(通常在应用程序的整个生命周期中),它就停留在这个窗口中。 每当需要显示不同的东西时,它就会从Node.js中运行的后台代码请求数据,就像AJAX应用程序从服务器请求数据一样。 页面本身没有重新加载,通常JavaScript模板将用于更新内容。

这里没有真正的服务器/客户端关系,但通信实际上可以是双向的。 双方都可以使用ipc模块相互发送消息( 主进程 , 渲染器 )。 这些消息可以有任何参数附加到它们,这些不需要显式编码(通常这是通过内部使用JSON编码参数实现的,我没有validation这是否与Electron的情况)。 在内部,消息传递是通过平台特定的IPC机制来实现的,使用libuv是确切的。

我们用sqlite3实现了function齐全的nodejs服务器和angular度用户界面,使用ORM进行序列化

*。 https://github.com/theallmightyjohnmanning/electron-express

一些项目帮助了我们很多:

  • 框架: https : //github.com/angular-fullstack/generator-angular-fullstack Windows包装:electron-packager“:”github:electron-userland / electron-packager“
  • 创build快捷方式和自动更新:“电子松鼠启动”:“^ 1.0.0”,
  • 创build发行安装程序:“电子winstaller”:“^ 2.3.4”,