当前位置: 首页 > 面试题库 >

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

吕成业
2023-03-14
问题内容

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


问题答案:

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

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

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



 类似资料:
  • 我正在用两个应用程序做project:android应用程序(客户端)和rest服务(服务器)。我的android应用程序消耗了我的rest服务。 这两个应用程序都是单独测试的,以确保它们按照预期完成业务。在服务器测试期间,我准备请求并检查服务器响应。在客户机测试期间,我设置了一个简单的http模拟服务器,并针对不同的模拟响应测试客户机的请求。 现在,这个技术很管用。它给了我一种我喜欢的灵活性。我

  • 我想在java上创建一个客户机/服务器应用程序,服务器的IP地址为192.168.1.100,在端口4500上等待客户机请求。 客户端从键盘上读取字符串,向服务器发送连接请求。一旦建立了连接,它就会将字符串发送到服务器。 这是我尝试的代码: 对于服务者: 对于客户端: 但这段代码有一个问题:

  • 我想让服务器更难被模仿的计划如下所示; 客户端创建一个随机字符串,string random; 然后对该字符串进行加密并发送到服务器。然后服务器对其进行解密并将其发回,如果发回的是与random相同的,那么它们就连接到了正确的服务器(而不是带有diff私钥的假服务器)。

  • 我在Java开发了一个客户端-服务器游戏(称为“Set”)。 在调试过程中遇到了一个非常尴尬的问题: 如果在同一台机器上同时运行客户端和服务器(客户端连接到localhost),这个游戏工作得很棒(如果我运行服务器和大量客户端的话也是如此)。 但是,如果我在两台不同的机器上运行客户端和服务器,那么客户端和服务器都挂起了Inputstream readLine方法。 我会提到我正在使用writeBy

  • 有一个echo服务器和一个echo客户端。当我使用杀死客户端进程时,将调用服务器上的。 EchoServer类 EchoClient类