一尘不染

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

node.js

我试图围绕电子(以前称为Atom Shell)的工作原理进行研究。

我来自一个传统的MVC风格的Web应用程序,在该应用程序中,浏览器通过 路由系统 调用 Controller动作
,然后Controller从商店(文件系统,数据库等)获取数据并呈现 View
,它被发送回浏览器。某些操作可能会发回JSON,因为它们是通过JavaScript / AJAX调用的,而不是通过浏览器实际导航到它们。

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

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

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


阅读 198

收藏
2020-07-07

共1个答案

一尘不染

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

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

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

2020-07-07