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

我试图理解 电子(以前的 Atom Shell)是如何工作的。

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

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

我想我可以在 Web 服务器上运行一个完整的应用程序(基本上,一些 Node.js HTTP 中间件,比如 特快) ,但是这会创建一个网络可及的服务器(这也可能会触发防火墙)——我想做一个桌面应用程序的原因之一就是为了避免运行一个真正的服务器。基本上就像“普通”桌面应用程序中的 MVP/MVVM 模式。

有没有人能给我一些起点,我正在努力做什么?浏览器如何与节点运行时(他们称之为“客户端”)交谈告诉它“嘿,用 ID 12345获取我的记录”,然后客户端返回呈现的 HTML,或者浏览器只是返回一个 JSON 块并通过 JavaScript 模板引擎呈现它?

23441 次浏览

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

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

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

我们使用 sqlite3实现了全功能的 nodejs 服务器和棱角用户界面,使用

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

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

  • 框架: < a href = “ https://github.com/angle-fullstack/Generator-angle-fullstack”rel = “ nofollow norefrer”> https://github.com/angular-fullstack/generator-angular-fullstack Windows 打包: 电子打包器”: “ github: 电子用户界面/电子打包器”
  • 创建快捷方式和自动更新: “电子松鼠启动”: “ ^ 1.0.0”,
  • 创建发布安装程序: “电子装置”: “ ^ 2.3.4”,