使用 Electron (Atom Shell) 时的客户端/服务器模型是啥?

Posted

技术标签:

【中文标题】使用 Electron (Atom Shell) 时的客户端/服务器模型是啥?【英文标题】:What is the Client/Server model when using Electron (Atom Shell)?使用 Electron (Atom Shell) 时的客户端/服务器模型是什么? 【发布时间】:2014-08-26 07:39:08 【问题描述】:

我正在尝试了解Electron(以前称为 Atom Shell)的工作原理。

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

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

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

有人可以给我一些我正在尝试做的事情的起点吗?浏览器如何与节点运行时(他们称其为“客户端”?)进行对话以告诉它“嘿,获取我的 ID 为 12345 的记录”,客户端会返回呈现的 html,还是浏览器只会得到一个 blob JSON 的返回并通过 JavaScript 模板引擎呈现?

【问题讨论】:

请注意,它不完全是“Github 的”Atom Shell,代码只是托管在 Github 上:) @apparatix Atom 是 Github 公司的一个项目 :) 好问题。这个链接应该发布在 Electron Getting Started 页面上(在我不再需要它的一年后,我在这里登陆它......如果能提前知道就好了!) 【参考方案1】:

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

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

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

【讨论】:

ipc 和模块的链接断开...获得了一个包含实现此代码的存储库的链接?【参考方案2】:

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

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

一些项目对我们帮助很大:

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

【讨论】:

如果我想使用 SQL Server 作为后端而不是 SQL Lite,你有什么例子吗?

以上是关于使用 Electron (Atom Shell) 时的客户端/服务器模型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Electron / Atom Shell App 设置应用程序图标

在 Electron (Atom Shell) 应用程序中存储用户设置的位置?

Atom Electron - 使用 javascript 关闭窗口

css dark.electron.atom.css

electron入门教程

Electron Atom - 编译后找不到模块“Node-Windows”