关于 Web 应用程序如何工作以及服务器客户端如何实现的问题

A question about how web applications work and how server-client is implemented

这是一个我想问的奇怪问题,但我过去浏览了一段时间并没有找到明确明确的答案。

我知道客户端连接到它自己的服务器并通过套接字与网络服务器通信,我有点了解它在 php 中的工作原理(我从未使用过 php 但之前使用过套接字,所以我理解这个概念)。 问题是我正试图对此有一个真实的看法。 问题是,网站通常使用套接字并联系网络服务器来获取数据还是实际的 html?还是在某些地区很少有选择?

如果是一般使用,那么"real"js一般是在服务器吗?还是客户端(为了性能)?

上下文:

让我解释一下我的来历,我不是网络专家,但我是一名计算机工程专业的学生,​​所以大多数概念都很容易理解。 "real"-er 对此的看法会很有帮助。

现在,谈谈我为什么要问这个问题。我正在开发一个网络应用程序作为项目的一部分,并且已经取得了相当大的进展,但一切都是在本地开发服务器上完成的(所以基本上是客户端?) 我开始对此感到疑惑,因为我想为我的网站使用数据库,并且因为我想连接到某些东西,所以我需要先连接到网络服务器(出于安全考虑)。 我的问题的目的是指导我如何以及最重要的是,在哪里设置此服务器。

我不认为在这里显示任何代码会有帮助,但假设我的客户 运行 在 localhost:1234,我的数据库在 localhost:3306,我想我应该在另一个端口上有一个网络服务器,这样我就可以建立这种通信,但我想以一种干净合法的方式进行,这样我当前的所有解决方案都可以在线移植,几乎没有变化(明显的除外)

这里有一堆东西要打开。

首先,服务器可以是远程本地。通常它们很远,本地服务器主要用于开发目的。

即使您的服务器在本地计算机上,它仍然不是客户端。客户端是连接到您的服务器的部分。对于 Web 开发,通常是用户浏览器。

Javascript是一种可以在服务器端使用的语言,有一个NodeJS服务器,但更多时候是客户端-端,在您的用户浏览器中。

您的网站或网络应用程序通过各种方式与您的服务器通信。最常见的一种是 HTTP 协议,用于发出服务器请求,例如数据请求以填充您的页面(如果是 API 服务器,REST 或其他),或者简单地请求实际页面显示在浏览器中。 HTTP 协议的工作原理是解析 URL,并使用特殊方法向注册到此 url 的服务器发出请求,例如 GETPOST删除、等等...

套接字 用于与您的服务器建立双向连接。它主要用于实时更新,例如实时聊天,因为它允许您从服务器推送更新,而不是让客户端请求所有内容。

在大多数情况下,数据库 可以在与服务网站或应用程序的服务器相同的服务器上找到,因为它更容易处理,而且通常更快额外的网络请求获取数据。但是它可以放在另一台服务器上,用它自己的 API 来获取数据(不一定与网络相关)

端口12343306经常用于本地开发,但是一旦您将项目移动到主机服务,这通常由 urls 代替。主机服务将为您提供访问关联数据库的配置。或者,如果您正在构建自己的服务器,您可能仍会使用端口。这在很大程度上取决于您的服务器配置。

希望这能解决一些问题。

除了@Morphyish 的回答,在最简单的情况下,Web 浏览器(客户端)从服务器请求 URL。 URL 包含服务器的域名和一些参数。服务器以 [​​=23=] 代码响应。浏览器解释代码并呈现网页。

浏览器和服务器使用 HTTP protocol 进行通信。 HTTP 是无状态的,每次请求后都会关闭连接。

服务器可以用静态响应 HTML,例如通过提供静态 HTML 文件。或者,通过提供动态 HTML。提供动态 HTML 需要某种服务器语言(例如 nodejs、PHP、python),这些语言本质上是连接字符串以构建 HTML 代码。通常,HTML 是通过用数据库中的数据填充模板创建的(例如 MySQL,Postgres)。 有无数的语言、框架和库可以帮助实现这一目标。

除了HTML,服务器还可以服务javascript,在浏览器中解释,为网页添加动态。但是,可能有 2 种类型的 javascript 不应混合使用。 NodeJS 在服务器上运行并格式化服务器响应,客户端 javascript 在浏览器上运行。请记住,客户端和服务器是完全隔离的,只能通过 HTTP 连接进行通信。

也就是说,有一些方法可以使用 WebSockets 在客户端和服务器之间建立持久连接,并添加各种奇特的解决方案。核心原则保持不变。

服务器软件(例如 apache、nginx)是否在您的本地计算机或其他任何地方 运行 并不重要。浏览器向地址发出请求,DNS 和网络堆栈计算出如何到达服务器并使其工作。