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

Mic*_*tum 68 javascript node.js electron

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

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

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

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

对于我正在尝试做的事情,有人能给我一些起点吗?浏览器如何与节点运行时(他们称之为"客户端"?)进行通信,告诉它"嘿,用ID 12345获取我的记录",客户端是否会返回呈现的HTML,或浏览器是否会得到一个blob JSON回来并通过JavaScript模板引擎呈现它?

Wla*_*ant 67

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

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

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

  • @MarkWilbur:我已经更新了链接. (2认同)