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


73

我试图围绕Electron(以前称为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模板引擎呈现它?


请注意,它不完全是“ Github的” Atom Shell,代码只是托管在Github上:)
apparatix

17
@apparatix Atom是Github公司的项目:)
Michael Stum

1
好问题。此链接应该发布在Electron Getting Started页面上(在我不再真正需要它的一年后,在这里着陆……很高兴能提前上线!)
jleach

Answers:


72

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

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

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


ipc和module的链接已断开。。。
Mark Wilbur

2

我们使用sqlite3实现了功能完备的nodejs服务器和角度UI,并使用

*。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,您有什么例子吗?
Selvakumar,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.