当前位置: 首页 > news >正文

web服务器 网站部署的架构

WEB服务器工作原理

Web

web是WWW(World Wide Web)的简称,基本原理是:请求(客户端)与响应(服务器端)原理,由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成

客户端发出请求的方式:地址栏请求、超链接请求、表单请求

Web是一种典型的分布式应用架构,从技术层面上看,Web架构的精华有三处

①使用HTML(Hypertext Markup Language)实现信息文档的表示

②使用URL(Uniform Resource Locator)实现全球信息的精确定位

③使用HTTP(HyperText Transfer Protocol)实现分布式的信息传输

什么是web服务器,应用服务器和web容器?

1. Web 服务器

Web 服务器是一种软件或硬件,旨在处理通过 HTTP 协议传送的请求。它们主要用于存储、处理和响应来自客户端(通常是浏览器)的请求,提供静态内容(如 HTML 文件、图像、CSS 文件等)和基础的动态内容。

  • 功能:接收 HTTP 请求、响应 HTTP 请求、处理静态资源和基础的动态内容等。

2. 应用服务器

应用服务器是一种服务器环境,专门用于运行应用程序并提供一些高级功能,例如业务逻辑处理和动态内容生成。与仅提供静态内容的 Web 服务器不同,应用服务器能够处理复杂的交互、连接后台数据库和管理应用程序状态。

  • 功能:业务逻辑处理、数据库连接、生成动态内容、事务管理等。
  • 示例:Java EE 应用服务器(如 JBoss、GlassFish、WebLogic)、.NET 应用服务器等。

3. Web 容器(Servlet 容器)

Web 容器,也称为 Servlet 容器,是一种运行 Java Servlet 和 JSP(JavaServer Pages)的环境。它管理 Web 应用程序的生命周期,以及处理客户端请求的相关服务。Web 容器属于应用服务器的一部分,但其主要任务是提供 Web 应用的特定功能。

  • 功能:加载和卸载 Web 应用、管理 servlets 生命周期、处理请求和响应、以及支持 JSP 等技术。
  • 示例:Apache Tomcat、Jetty。

工作原理

  1. 客户端请求

    • 用户在浏览器中输入一个 URL,或点击一个链接,浏览器会将该请求发送到指定的 Web 服务器。请求通常是一个 HTTP GET 请求,但也可以是 POST、PUT 或 DELETE 等其他类型的请求。
  2. DNS 解析

    • 请求中的域名需要转化为 IP 地址。DNS(域名系统)会将域名解析为对应的服务器的 IP 地址,帮助浏览器找到 Web 服务器的位置。
  3. 建立连接

    • 一旦浏览器获得了服务器的 IP 地址,它将通过 TCP/IP 协议与 Web 服务器建立连接。这个过程通常使用三次握手来确保连接的可靠性。
  4. 请求处理

    • Web 服务器接收到来自客户端的请求后,会解析请求信息,确定用户请求的资源。
    • Web 服务器会查找请求的文件(如 HTML 文件、图像文件)或者动态内容(如运行一个 PHP 脚本或访问数据库)并处理请求。

在这里插入图片描述

  1. 生成响应

    • 一旦请求被处理,Web 服务器将生成一个 HTTP 响应。该响应包含状态码(如 200 表示成功,404 表示找不到资源等)、响应头和响应体(请求的内容)。
    • 如果请求的是静态文件(如 HTML、CSS、JS 或图像),Web 服务器将直接返回这些文件。
    • 如果请求的是动态内容,Web 服务器可能需要与应用服务器、数据库交互,生成动态内容后再返回给客户端。
  2. 返回响应

    • Web 服务器通过 TCP 连接发送 HTTP 响应回客户端的浏览器。浏览器接收到响应后,会解析并呈现网页内容。
  3. 关闭连接

    • 根据 HTTP 协议的版本(如 HTTP/1.1 支持持久连接,而 HTTP/2 则有更先进的连接管理),浏览器和服务器可以选择保持连接活动或在响应完成后关闭连接。

正向代理(Forward Proxy)

定义:

正向代理是代理服务器位于客户端与目标服务器之间,客户端通过它向目标服务器发送请求,目标服务器无法直接知道请求源于哪个客户端。

功能:

  • 隐藏客户端信息:目标服务器只知道代理服务器的 IP 地址,而不知道客户端的真实 IP 地址。
  • 访问控制:可以用来限制客户端对某些网站或服务的访问,例如在企业或学校环境中。
  • 缓存:代理服务器可以缓存请求的内容,以提高访问速度和减少带宽消耗。
  • 绕过地理限制:允许用户访问被地理限制的网站或服务。

使用场景:

  • 企业内部网络中,控制员工访问外部网站。
  • 在互联网审查严格的地区,用户使用代理获取受限内容。

反向代理(Reverse Proxy)

定义:

反向代理是一种服务器,接收客户端的请求并将其转发到内部的一台或多台服务器。这种情况下,客户端并不知道具体哪个服务器在处理其请求。

功能:

  • 隐藏服务器信息:目标服务器的真实 IP 地址对外部用户是隐藏的。
  • 负载均衡:将客户端请求分配到多台后端服务器,以优化资源利用和提高响应速度。
  • SSL 加密:可以用于处理 SSL/TLS 加密,减轻后端服务器的负担。
  • 安全性:提供额外的安全措施,如防火墙或应用程序防护。

使用场景:

  • Web 应用程序使用反向代理来平衡流量和提高性能。
  • 需要保护私有服务器并防止直接访问。

常见的 Web 服务器软件

1. Apache HTTP Server

  • 概述:Apache 是一款开源的高性能 Web 服务器,已经被广泛使用。它在 Web 服务器市场占据着重要位置,因其灵活性和强大的功能而受到开发者和管理员的青睐。

  • 主要特点

    • 模块化设计:支持多种模块,可以根据需要进行功能扩展(如 SSL、URL 重写、反向代理等)。
    • 丰富的配置选项:允许用户通过配置文件进行深入定制,适应不同的需求。
    • 虚拟主机支持:能够在同一服务器上托管多个网站,通过虚拟主机进行区分。
    • 强大的社区支持:拥有庞大的用户基础和在线文档,易于查找解决方案。
  • 适用场景:适合各种规模的项目,从小型网站到大型企业应用,特别是需要多种功能和高度可定制的环境。

2. Nginx

  • 概述:Nginx 是一个轻量级的高性能 HTTP 服务器和反向代理服务器,以其出色的并发处理能力而闻名。最初是为了解决 C10K 问题(处理千个并发连接)而设计的。

  • 主要特点

    • 事件驱动架构:使用异步非阻塞 I/O 模式,能够同时处理大量的并发请求,节约内存资源。
    • 反向代理和负载均衡:能够将请求转发到后端服务器,进行负载均衡,提高应用的可用性和性能。
    • 高效的静态文件服务:特别擅长处理静态资源,能够快速响应用户请求。
    • 低资源消耗:在处理高并发的情况下,低内存占用使其非常受欢迎。
功能场景解释
  • 1、Http代理,反向代理:

作为web服务器最常用的功能之一,尤其是反向代理。
Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
在这里插入图片描述

  • 2、负载均衡

负载均衡的基本概念

  • 请求分发:负载均衡器负责接收用户请求,然后将这些请求分发到后端服务器上,以实现负载均匀分配。
  • 故障检测:负载均衡器可以监控后端服务器的健康状态,确保只有正常工作的服务器处理请求。一旦检测到某台服务器出现问题,负载均衡器会将流量重定向到其他健康服务器。
  • 会话保持:在某些应用场景中,可能需要将来自同一用户的请求始终路由到同一台服务器,负载均衡器可以通过会话保持(又称为会话粘性)来实现这个功能。

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

在这里插入图片描述

Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

在这里插入图片描述
nginx 文件结构

...              #全局块
//全局块:配置影响nginx全局的指令。
//一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。events {         #events块...//events块:配置影响nginx服务器或与用户的网络连接。//有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
}http      #http块
{...   #http全局块//http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。//如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。server        #server块//配置虚拟主机的相关参数,一个http中可以有多个server。{ ...       #server全局块location [PATTERN]   #location块//配置请求的路由,以及各种页面的处理情况。{...}location [PATTERN] {...}}server{...}...     #http全局块
}
Nginx 的常见用例:
  1. 静态文件服务器:很适合用来服务静态文件,如 HTML、CSS 和 JavaScript。

  2. 反向代理服务器:可用于将请求代理到应用服务器,增强应用的安全性和性能。

  3. 负载均衡:通过将请求分配到多个应用服务器,提升服务的可用性和响应速度。

  4. WebSocket 支持:支持 WebSocket 协议,适合实时应用。

  5. SSL/TLS 终端:可以处理 SSL 加密,减轻应用服务器的负担。

启动和管理 Nginx:
  • 安装:可以通过包管理工具(如 aptyum)安装 Nginx。
  • 启动:使用 nginx 命令启动 Nginx,用 nginx -s reload 命令重新加载配置。
  • 检查状态:使用 nginx -t 命令检查配置文件的语法。

3. Apache Tomcat

  • 概述:Tomcat 是一个开源的 Java Servlet 容器,专门用于运行 Java Web 应用,支持 Java EE 标准中的 Servlets 和 JSP(JavaServer Pages)。

  • 主要特点

    • Java 专属:专为运行 Java 应用而设计,支持标准的 Servlet API 和 JSP 规范。
    • 灵活的部署:允许将 Web 应用以 WAR 文件的形式部署,简化了应用的管理和更新。
    • Web 应用管理:提供管理界面,方便监控和管理部署的应用程序。
    • 与 Java EE 的集成:能够与其他 Java EE 技术(如 Spring、Hibernate 等)良好配合。
  • 适用场景:专门适合 Java 开发的 Web 应用,通常是需要处理复杂逻辑的动态网站。
    在这里插入图片描述
    Tomcat在技术实现上所处的位置如下
    在这里插入图片描述

Tomcat主要组件:服务器Server,服务Service,连接器Connector、容器Container, 连接器Connector和容器Container是Tomcat的核心。
在这里插入图片描述

一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了,但是Service服务的生存需要一个环境,这个环境便是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件可以同时管理一个或多个Service服务。

  • 1、Connector组件

Connector组件是Tomcat中的两个核心组件之一,他的主要任务是负责接收浏览器发过来的TCP连接请求,创建1个Request和Response对象分别用于和请求端交换数据。然后会产生一个线程来处理这个请求并把产生Request和Response对象传给处理这个请求的线程,处理这个请求的线程就是Container组件要做的事了。

  • 2、Container组件

Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。

Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。

容器类型描述
Engine 容器容器比较简单,只定义了一些基本的关联关系。
Host 容器是 Engine 的子容器,代表一个虚拟主机,用于运行多个应用。它负责安装和展开应用,并标识应用以便区分它们。它的子容器通常是 Context。
Context 容器代表 Servlet 的上下文环境,具备 Servlet 运行的基本条件。它管理 Servlet 实例(以 Wrapper 形式出现)。在 Tomcat 5 以后,通过 request 来分配正确的 Servlet。
Wrapper 容器代表一个 Servlet,负责管理 Servlet 的装载、初始化、执行和资源回收。它是最底层的容器,没有子容器,调用 addChild 会报错。其实现类是 StandardWrapper,它还实现了 ServletConfig,直接与 Servlet 的各种信息打交道。
  • Tomcat目录
    |—bin Tomcat:存放启动和关闭tomcat脚本;
    |—conf Tomcat:存放不同的配置文件(server.xml和web.xml);
    |—doc:存放Tomcat文档;
    |—lib/japser/common:存放Tomcat运行需要的库文件(JARS);
    |—logs:存放Tomcat执行时的LOG文件;
    |—src:存放Tomcat的源代码;
    |—webapps:Tomcat的主要Web发布目录(包括应用程序示例);
    |—work:存放jsp编译后产生的class文件;

  • HTTP请求Tomcat内部处理过程

在这里插入图片描述

  1. 用户点击网页内容,请求被发送到本机端口8080,被在那里监听的 HTTP/1.1 Connector 获得。
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
  3. Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
  4. Engine匹配到名为 localhost 的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
  5. path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
  6. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的 doGet()或doPost().执行业务逻辑、数据存储等程序。
  7. Context把执行完之后的HttpServletResponse对象返回给Host。
  8. Host把HttpServletResponse对象返回给Engine。
  9. Engine把HttpServletResponse对象返回Connector。
  10. Connector把HttpServletResponse对象返回给客户Browser。

Tomcat与Nginx/Apache的应用架构

在这个架构中,Nginx 或 Apache 充当前端的网关,通过反向代理接受所有进入的请求。请求根据类型被智能地路由到不同的处理服务器,这种模式称为动静分离。以下是具体流程:

  1. 接收请求:客户端发起请求,首先到达 Nginx 或 Apache 服务器。

  2. 请求处理

    • 静态请求:例如,请求 CSS、JavaScript、图片等静态资源,这些请求会直接由 Nginx 或 Apache 处理,并返回静态内容。
    • 动态请求:例如,请求访问数据库、用户认证等需要应用逻辑的请求,这些请求会被转发到 Tomcat 服务器。
  3. Tomcat 处理动态逻辑:Tomcat 接收动态请求,执行相应的业务逻辑,并返回处理结果(通常是生成的 HTML 页面或 JSON 数据)。

  4. 最终响应:Nginx 或 Apache 将 Tomcat 的响应返回给客户端。

2. 优点分析
  • 性能优化:静态内容由 Nginx 或 Apache 直接处理,这可以显著减少 Tomcat 的负担,提升整体性能。
  • 高并发处理:Nginx 和 Apache 设计上能够高效处理大量并发请求,而 Tomcat 更适合处理业务逻辑。
  • 安全性:通过反向代理,可以隐藏内部服务器架构,改善安全性。
  • 灵活性:可以根据负载和请求类型调整 Nginx/Apache 和 Tomcat 的配置。

简化的架构图示

                         +---------------+|   Client      |+---------------+||+--------------------+|    Nginx/Apache    |+--------------------+| 静态请求 ||  动态请求 |+--------------------+/                \/                  \+----------------+        +----------------+| Static Content |        |    Tomcat      || (Nginx/Apache) |        | (Dynamic Logic)|+----------------+        +----------------+

网站部署的架构

以主流的B/S架构网站为例,大型网站的部署一般分为几个部分

1、前端部分

2、后端部分

3、云计算部分

4、存储部分与第三方云计算服务部分

1、前端部分

单个前端服务器一般包含2个部分,Web服务器软件、网页资源文件

在这里插入图片描述

Web服务器软件作用是在接收到请求后,在磁盘上找到对应的网页资源文件,并将其发送给请求端

网页资源文件指的是网页的静态资源文件,包括HTML文件、CSS文件、JavaScript文件、图片文件、视频文件等

其中,一部分网页资源文件可能会存在单独的文件服务当中(如上传的头像、视频等)

对于前端服务器集群而言,前面需要增加负载均衡以分发请求

负载均衡可以是自己搭建的服务器(Nginx等)或者是购买云服务

在负载均衡前面需要增加CDN服务(缓存网页资源文件),增加CDN是为了加速网页资源文件的下载速度

2、后端部分

单个后端服务器一般包含2个部分,Web应用服务器软件、后端应用程序

在这里插入图片描述
Web应用服务器软件根据不同的开发语言有所区别,Java的话一般是Tomcat 或者Jetty

其作用是接收到请求后,调用相对应的后端应用程序,并把后端应用程序处理的结果返回请求端

后端应用程序是真正处理请求的程序,java编写的话一般是以.war结尾的文件

后端应用程序在网站系统中处于“司令塔”的位置

会调用很多第三方软件,如数据库、非关系型数据库(如Redis)、消息队列、第三方云计算服务等

而且后端应用程序还会操作共享文件,如上传头像、视频等

对于后端服务器集群而言,前面需要增加负载均衡以分发请求,负载均衡可以与前端服务共用

3、云计算部分

由于没有比较通用且流行的框架,其结构因具体实现方式而异。

在这里插入图片描述

不过云计算部分的工作原理一般是,后端应用程序向消息队列下发任务,云计算服务软件监听消息队列并执行任务

云计算服务集群一般是监听同一个消息队列,以抢占的方式获取任务的,所以不需要考虑分发任务的问题

当然,云计算服务根据具体的功能,也可能会使用第三方软件(如数据库等)或者操作共享文件

4、存储部分与第三方云计算服务部分

存储部分包括数据库、文件服务器、非关系型数据库等

在这里插入图片描述

这些软件都会提供自己的集群方式

第三方云计算服务部分一般是通过API调用的

总体的部署架构如图所示

在这里插入图片描述

补充概念

1. 集群(Cluster)

  • 定义:集群是由多台计算机(服务器)组成的系统,这些计算机通过网络连接并协同工作,通常它们提供相同的功能。集群的目标是提高服务可用性和可扩展性,降低单个服务器的负载。
  • 类型
    • 负载均衡集群:通过将请求分发到不同的服务器来处理大量流量,例如Web服务。
    • 高可用集群:通过冗余配置保证服务的持续可用性,在某个节点发生故障时,其他节点代替其提供服务。

2. 分布式系统(Distributed System)

  • 定义:分布式系统由多个独立的计算机组成,每台计算机负责系统的不同功能。这些计算机通常通过网络进行通信。分布式系统的设计旨在提高系统的可扩展性和容错能力。
  • 优势
    • 专门化:每个服务器可以专注于特定的任务,比如Web服务器、数据库服务器、缓存服务器等。
    • 灵活性:可以根据需要增加或减少服务器,提高资源利用率。

3. Docker

  • 定义:Docker 是基于 Linux 的开源容器化平台,允许开发者将应用和其所有依赖打包到一个标准的、轻量级的容器中。每个容器都是一个隔离的运行环境,但它们共享同一操作系统的内核。
  • 特点
    • 隔离性:容器彼此独立,避免了环境冲突。
    • 可移植性:容器可以在不同的环境中快速部署,确保一致性。
    • 高效性:多个容器可以在同一台物理服务器上运行,资源利用率高。

4. Kubernetes(K8S)

  • 定义:Kubernetes 是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用程序。它可以管理由 Docker 或其他容器技术构建的容器。
  • 功能
    • 自动化部署:K8S 可以根据负载自动部署和销毁容器。
    • 服务发现和负载均衡:自动发现服务,并将流量分配到适当的容器。
    • 自我修复:控制平面监控容器状态,如果某个容器失败,K8S 会自动重启或替换它。

5. 虚拟机(Virtual Machine)

  • 定义:虚拟机是在虚拟化软件(如 VMware、VirtualBox)上运行的计算机,相当于在物理服务器上模拟出多个独立的软件环境(虚拟环境)。每个虚拟机都有自己的操作系统和资源,表现为一台完整的计算机。
  • 特点
    • 资源隔离:每个虚拟机都有自己的操作系统和资源分配,彼此独立。
    • 灵活性:可以在一台物理服务器上运行多个虚拟机,各自独立运行不同的应用。
    • 方便管理:可以对虚拟机进行快照,便于备份和恢复。

集群分布式系统 是提升系统性能和可靠性的架构理念。

Docker 提供了容器化技术,支持轻量级的应用打包和部署。

Kubernetes 是管理和编排容器的工具,可以自动化管理容器的生命周期。

虚拟机 提供了完整的虚拟化环境,允许在单台物理服务器上运行多个独立的系统。

相关文章:

web服务器 网站部署的架构

WEB服务器工作原理 Web web是WWW(World Wide Web)的简称,基本原理是:请求(客户端)与响应(服务器端)原理,由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成 客户端发出请求的方式:地址栏请求、超链接请求、表单请求 …...

ecovadis验厂相关要求

EcoVadis验厂的相关要求主要包括以下几个方面: 一、企业基本资质要求 合法注册与运营:企业必须是合法注册并运营的法人实体,具备合法的经营资质,如营业执照、税务登记证等。无严重违法记录:在过去三年内,…...

SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别

目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言,Python也是高级编程语言;不是框架(框架:一般用于大型复杂需求项目,用于快速开发)具有三大特性,所谓Jav…...

Spring Boot中选择性加载Bean的几种方式

说明:用过Spring框架的都知道其自动装配的特性,本文介绍几种选择性加载Bean的方式。Spring自动装配参考以下两篇文章: 基于SpringBoot的三层架构开发&统一响应结果 SpringBoot自动装配原理简单分析 ConditionalOnProperty Conditiona…...

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中,垃圾回收(GC)是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…...

【实用技能】如何在Stimulsoft产品中使用用户函数,快速创建报表及仪表盘

Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…...

MySQL四种隔离级别

MySQL的隔离级别是在事务这个大主题下面产生的说法。 那么什么是事务,事务就是一组sql语句,要么全部执行成功,要么都不执行,不能只执行成功其中的部分sql。事务的最终目的是为了保证数据库数据的完整性、一致性和可用性。 要保…...

Unity入门1

安装之后无法获得许可证,可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用,重开vstu,或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…...

qml Loader详解

1、概述 QML Loader是Qt Quick框架中的一个关键元素,它允许开发者动态地加载和卸载QML组件。这种动态加载机制对于提升应用程序的性能、响应速度和用户体验至关重要。通过Loader,应用程序可以在需要时才加载特定的组件,而不是在启动时一次性…...

《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: 《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风…...

web端ActiveMq测试工具

如何用vue3创建简单的web端ActiveMq测试工具? 1、复用vue3模板框架 创建main.js,引入APP文件,createApp创建文件,并加载element插件,然后挂载dom节点 2、配置vue.config.js脚本配置 mport { defineConfig } from "vite&qu…...

1561. 你可以获得的最大硬币数目

class Solution:def maxCoins(self, piles: List[int]) -> int:piles.sort()res,n0,len(piles)for i in range(n//3):respiles[n-2-2*i]return res这里如果"你"想要获取最大,那么从最大的开始找 每隔俩算一个最大累计,Bob默认自己从最小那找…...

NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (二)

实时通信应用 的主流技术 并非NIO , 整理本文的目的是 更好的理解 NIO 。 在现代的 即时聊天应用中,使用 WebSocket、MQTT 或 SignalR 等协议更为普遍。 若您想了解 当前主流的有关 实时通信应用 的技术 , 请移步他文。 (一) 业务场景 实…...

GD32L233RB 驱动数码管

1.数码管有8段A、B、C、D、E、F、G 和 H小数点 以及片选信号(DIG) DIG用来选择那一位,A-G 用来显示段 静态显示每次只能一次显示单个位 动态显示(动态扫描)所有的位显示结束要在10ms左右 显示2ms 消光1ms 实…...

AIGC视频生成模型:Stability AI的SVD(Stable Video Diffusion)模型

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Stability AI的视频生成模型SVD(Stable Video Diffusion)模型,这家公司在图像生成领域富有盛名,开发并维护了知名开源项目SD系列…...

Linux 系统错误处理简介

Linux 系统错误处理简介 1. errno:错误代码的载体2. strerror():错误信息的翻译官3. perror():便捷的错误信息输出4. 系统调用与库函数的区别5. 错误处理的最佳实践 在 C/C 程序开发中,我们经常需要处理各种错误情况 Linux 系统提…...

systemC示例

main.cpp #include <memory> using namespace std; #include "top.h" int sc_main(int i, char *av[]) { // 关闭关于 IEEE 1666 标准中过时特性的警告 sc_report_handler::set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); cout <…...

C++打字模拟

改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...

国产低功耗带LCD驱动和触摸按键功能的MCU

以下是国产低功耗、集成LCD驱动和触摸按键功能的MCU精选型号及其核心特性&#xff0c;结合性能、功耗和适用场景进行综合推荐&#xff1a; 1.灵动微MM32L0130系列 257 核心特性&#xff1a;低功耗&#xff1a;待机模式功耗低至100nA&#xff0c;支持多种低功耗模式。 LCD驱动&a…...

在 imx93 平台调试 nau88c10 声卡

一、环境介绍 linux 版本&#xff1a;6.6.52 soc&#xff1a;imx9331 codec&#xff1a;nau88c10 使用的内核文件为 Image&#xff0c;dtb 文件为&#xff1a;imx93-11x11-evk.dtb 二、硬件检查 i2s 信号线要接对 i2c 控制信号建议为 4.7k 上拉 codec 供电可以按参考设计…...

机器学习-分类算法评估标准

一. 准确率 accuracy 将预测结果和测试集的目标值比较&#xff0c;计算预测正确的百分比 准确率越高说明模型效果越好 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier #加载鸢尾花…...

美区TikTok解封后如何回归使用?

随着2025年初美区TikTok解封的消息引起了广泛关注&#xff0c;许多用户纷纷开始重新关注这一全球最受欢迎的短视频平台。在经历了数月的禁用期后&#xff0c;TikTok在美国市场的回归&#xff0c;代表了这一平台的巨大潜力和挑战。从用户的使用习惯&#xff0c;到平台的内容策略…...

行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…...

grafana + Prometheus + node_exporter搭建监控大屏

本文介绍生产系统监控大屏的搭建&#xff0c;比较实用也是实际应用比较多的方式&#xff0c;希望能够帮助大家对监控系统有一定的认识。 0、规划 grafana主要是展示和报警&#xff0c;Prometheus用于保存监控数据&#xff0c;node_exporter用于实时采集各个应用服务器的事实状…...

【腾讯云】docker创建网络遇到Unable to enable SKIP DNAT rule

docker创建网络遇到Unable to enable SKIP DNAT rule 背景 今天打算在服务器上安装es,但是在创建网络时&#xff0c;提示 Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER…...

DeepSeek R1模型解读与使用

DeepSeek在推出R1预览版两个月后&#xff0c;发布了R1的正式版本&#xff0c;并且开源了模型&#xff0c;开放了API调用。我们直接来解读一下这款模型。 这是官方的性能评测图。从左到右分别是DeepSeek-R1&#xff0c;o1正式版&#xff0c;32B蒸馏版R1&#xff0c;o1-mini&…...

AI新玩法:Flux.1图像生成结合内网穿透远程生图的解决方案

文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在这个AI技术日新月异的时代&#xff0c;图像生成模型已经成为了创意工作者和开发者手中…...

api开发如何确保通过非官方库解析口令的合法性?

通过非官方库解析淘宝口令可能存在违反淘宝平台规则以及法律法规的风险&#xff0c;很难完全确保其合法性。如果确实有需求&#xff0c;可从以下几个方面尽量降低风险&#xff0c;提高合法性&#xff1a; 了解法律法规 《中华人民共和国网络安全法》&#xff1a;需确保解析行为…...

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中&#xff0c; 默认情况下&#xff0c; 新的线程都会被加入到main线程所在的group中&#xff0c; main线程的group名字同线程名。如同线程存在父子关系一样&#xff0c; Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…...

如何使用Python脚本将本地项目上传到 GitHub

前言 这里我们通过创建一个新的github仓库&#xff0c;来测试我们的脚本能否上传我们本地的项目&#xff0c;并且进行更新。首先你需要先安装 Git&#xff0c;关于这部分我好像没有记录过&#xff0c;这里我搜索看了一下&#xff0c;这篇博客写的Git安装详解应该是比较齐全的&…...

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…...

Shellcode

什么是shellcode shellcode通常是软件漏洞利用过程中使用一小段机器代码 作用 1.启动shell&#xff0c;进行交互 2.打开服务器端口等待连接 3.反向连接端口 4.。。。 如何编写shellcode 1.设置rdi指向/bin/sh 2.rsi0,rdx0 3.rax0x3b 4.syscall进行系统调用 64位系统…...

Element使用表单重置如果不使用prop,重置无法生效

文章目录 为什么需要 prop&#xff1f;示例&#xff1a;使用 prop 的正确方式关键点总结 在 element-ui 的 el-form 组件中&#xff0c; prop 属性是与表单验证和表单字段绑定密切相关的&#xff0c;尤其在使用 resetFields() 重置表单数据时。 如果不使用 prop&#xff0…...

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议

目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…...

两台局域网电脑通过飞秋传输大文件失败的解决方案

问题描述&#xff1a; 局域网两台电脑之间传输大文件&#xff08;超过20G&#xff09;&#xff0c;不想太复杂&#xff0c;就各装个飞秋。但是通过直接发送文件发现总是失败&#xff0c;一会就中断了。 解决方法&#xff1a; 主界面上有一个文件共享的按钮&#xff0c;通过文…...

安卓程序作为web服务端的技术实现(二):Room 实现数据存储

已经实现web服务器安卓程序作为web服务端的技术实现&#xff1a;AndServer 实现登录权限拦截-CSDN博客 现在需要和正常web项目类似&#xff0c;那么就需要操作数据库 一般web项目都是选择较为重型的数据库如MySQL&#xff0c;SQL server等 这里是安卓项目&#xff0c;我目前…...

代码工艺:实践 Spring Boot TDD 测试驱动开发

TDD 的核心理念是 “先写测试&#xff0c;再写功能”&#xff0c;其过程遵循一个严格的循环&#xff0c;即 Red-Green-Refactor&#xff1a; TDD 的流程 1. Red&#xff08;编写失败的测试&#xff09; 根据需求&#xff0c;先编写一个测试用例&#xff0c;描述期望的行为。…...

MySQL命令及用法(精华版)

目录 DDL&#xff08;数据定义语言&#xff09; 数据库操作 表操作 DML&#xff08;数据操作语言&#xff09; DQL&#xff08;数据查询语言&#xff09; 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 DCL&#xff08;数据控制语言&#xff09; 用户…...

73,【5】BUUCTF WEB [网鼎杯 2020 玄武组]SSRFMe(未解出)

进入靶场 又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码 <?php // 检查 URL 是否为内部 IP 地址 function check_inner_ip($url) {// 使用正则表达式检查 URL 格式是否以 http、https、gopher 或 d…...

修改word的作者 最后一次保存者 总编辑时间 创建时间 最后一次保存的日期

作者&#xff1a; 1.打开word文件 2.点击左上角的文件 3.选项 4.用户信息 5.将用户信息中的 姓名改为你需要的名字 最后一次保存者 1.word重命名为.zip文件 2.docProps中有个core.xml 3.用记事本打开有个lastModifiedBy标签&#xff0c;将里面内容改为你需要的名字 总编辑时…...

深入MapReduce——引入

引入 前面我们已经深入了HDFS的设计与实现&#xff0c;对于分布式系统也有了不错的理解。 但HDFS仅仅解决了海量数据存储和读写的问题。要想让数据产生价值&#xff0c;一定是需要从数据中挖掘出价值才行&#xff0c;这就需要我们拥有海量数据的计算处理能力。 下面我们还是…...

Formality:不可读(unread)的概念

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念&#xff0c;本文就将对此…...

leetcode刷题记录(八十一)——236. 二叉树的最近公共祖先

&#xff08;一&#xff09;问题描述 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09;236. 二叉树的最近公共祖先 - 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科 [https://baike.baidu.com/item/%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B…...

C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。

代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...

特征选择(机器学习)

目录 1. 为什么需要特征选择2. 常见的特征选择方法2.1 过滤式&#xff08;Filter Methods&#xff09;小示例&#xff08;用 Python 伪代码表达&#xff09;&#xff1a; 2.2 包裹式&#xff08;Wrapper Methods&#xff09;小示例&#xff08;RFE 伪代码示例&#xff09;&…...

基于微信小程序的个人健康管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法

最近&#xff0c;Win11 24H2预览版和Win10 LTSC 2025功能更新偶尔会触发RunDLL错误弹窗 具体表现为 //英文提示 Error in C:\WINDOWS\system32\PcaSvc.dll Missing entry: PcaWallpaperAppDetect//中文提示 C:\WINDOWS\system32\PcaSvc.dll出错 丢失条目:PcaWallpaperAppDe…...

文件上传漏洞详解

第一关&#xff08;JS绕过&#xff09; 1.1使用bp进行绕过 先将要上传的php文件的后缀改为png&#xff0c;然后在上传时抓包&#xff0c;将png后缀再改为php&#xff0c;发包&#xff0c;此时上传成功 1.2使用js进行绕过 打开浏览器的检查&#xff0c;将其中的checkFile函数…...

mysql的mvcc

快速搞懂mvcc 全称 multi-version concurrency control 多版本并发控制。自动开启事务undo log读视图(read_view)结果过滤mvcc只在读已提交和可重复读隔离级别下运作读已提交隔离级别下&#xff0c;可重复读隔离级别下&#xff0c;总的来说mvcc是为了提高数据库并发性能而设计的…...

漏洞情报:为什么、要什么和怎么做

漏洞一直是网络攻防的焦点所在&#xff0c;因为漏洞直接或间接影响安全性的核心方面——权限。攻击者挖掘和利用漏洞&#xff0c;获取非授权的权限&#xff1b;防御方定位和消除漏洞&#xff0c;监测和阻断漏洞的利用&#xff0c;使攻击者无法利用漏洞达到其目的。漏洞信息本质…...