当使用Electron (Atom Shell)时,什么是Client/Server模型?

What is the Client/Server model when using Electron (Atom Shell)?

本文关键字:Client 什么 Server 模型 Electron Atom Shell      更新时间:2023-09-26

我正在努力理解Electron(以前的Atom Shell)是如何工作的。

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

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

我想我可以运行一个完整的web服务器(基本上,一些Node.js HTTP中间件,如Express),但这会创建一个网络可达的服务器(这也可能绊倒防火墙)-我想做一个桌面应用程序的原因之一正是为了避免运行一个真正的服务器。基本上就像"正常"桌面应用程序中的MVP/MVVM模式。

谁能给我一些起点,我正在努力做什么?浏览器如何与节点运行时(他们称之为"客户端")对话,告诉它"嘿,获取ID为12345的记录",客户端会返回呈现的HTML,还是浏览器只是返回一团JSON并通过JavaScript模板引擎呈现它?

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

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

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

我们实现了功能齐全的nodejs服务器&使用sqlite3的angular UI,使用

序列化ORM

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

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

  • 框架:https://github.com/angular-fullstack/generator-angular-fullstackgithub: electronon -userland/electronon -packager"
  • 创建快捷方式和自动更新:"electron-squirrel-startup"; "^1.0.0"
  • 创建发布安装程序:"electron- wininstaller "; "^2.3.4",