CHAPTER 2 Web Server - httpd配置(一)

news/2024/4/16 20:02:13/文章来源:https://blog.csdn.net/u010230019/article/details/129122675

Web Server - httpd

    • 2.1 http
      • 2.1.1 协议版本
      • 2.1.2 http报文
      • 2.1.3 web资源(web resource)
      • 2.1.4 一次完整的http请求处理过程
      • 2.1.5 接收请求的模型
    • 2.2 httpd配置
      • 2.2.1 MPM(多进程处理模块)
        • 1. 工作模式
        • 2. 切换MPM
        • 3. MPM参数配置
      • 2.2.2 主配置文件
        • 1. 基本配置
        • 2. 站点访问控制常见机制:
        • 3. 命令解析
          • 3.1 Options
          • 3.2 AllowOverride
          • 3.3 Order
          • 3.4 DirectoryIndex
          • 3.5 Alias
          • 3.6 AddDefaultCharset
          • 3.7 日志设定
        • 4. 配置示例
          • 4.1 控制页面资源允许所有来源的主机可访问:
          • 4.2 控制页面资源不允许所有来源的主机可访问:
          • 4.3 控制页面资源允许部分来源的主机可访问:

在介绍apache(httpd)配置之前,我们先介绍下http

2.1 http

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

http、httpd和html概念

http/https:hyper text transfer protocol 超文本传输协议,位于传输层,默认端口80/tcp
html:hyper text mark language 超文本标记语言
httpd:c/s架构(client/server),httpd通过http协议通信

并不准确的表达:web服务器通过httpd服务程序,通过http协议,响应给用户html文件。而用户通过浏览器(大多数情况下),向web服务器发送http请求,获取html文件

web服务是一个C/S架构,服务端提供服务,客户端通过http协议或https协议进行访问,拿到服务端对应的资源,这就是web服务;

2.1.1 协议版本

http/0.9 原型版本,功能简陋
http/1.0 引入cache,MIME,method

MIME:Multipurpose Internet Mail Extesion(多用途互联网邮件扩展,可引入图片,声音等,对不同资源进行编码)``
method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

http/1.1 增强了缓存功能;主流版本
----谷歌的SPDY方案----
http/2.0 借鉴了spdy,性能提升,可通过RFC了解
详细介绍

2.1.2 http报文

http请求报文:http request
http响应报文:http response
一次http事务:请求<->响应
请求报文首部格式:

	<method><URL><VERSION>HEADERS:{name:value}<request body>

2.1.3 web资源(web resource)

静态资源:.jpg,.png,.gif,.html,.avi… 服务器段无需额外处理
动态资源:.php,.jsp… 服务器需要通过执行程序作出处理,发送给客户端的程序运行结果

注意:一个页面中展示的资源有多个;每个资源需要单独请求

URL: uniform resource locator,统一资源定位符,资源的标识机制,用于描述服务器某特定资源位置
格式:
Scheme://server[:port][path/to/source]
示例:
http://www.sina.com.cn:80/index.html
大部分网站的默认端口都是80,可以省略

2.1.4 一次完整的http请求处理过程

1.建立或处理连接:接收或拒绝请求
2.接收请求:接收来自网络上的主机请求报文中对某特定资源的一次请求的过程;
3.处理请求:对请求报文进行解析,获取客户段请求的资源及请求方法等相关信息;
4.访问资源:获取请求报文中请求的资源;一般到本地磁盘 DocumentRoot
5.构建响应报文
6.发送响应报文
7.记录日志;分析用户访问行为

2.1.5 接收请求的模型

并发访问响应模型:

  1. 单进程I/O模型:启动一个进程处理用户请求;一次只能处理一个请求,多个请求被串行响应
  2. 多进程I/O模型:由父进程并行启动多个子进程,每个子进程响应一个请求
  3. 复用的I/O模型:一个进程响应n个请求;

    多线程模式:一个进程生成n个线程,一个线程处理一个请求;(处理能力有限,一个进程内的线程共享资源,当一个线程在处理文件,其他线程等待)
    事件驱动(event-driver):一个进程直接处理n个请求
    复用的多进程I/O结构:启动多个进程m,每个进程生成n个线程;响应请求数量:m*n

2.2 httpd配置

2.2.1 MPM(多进程处理模块)

前文中提到了httpd的特性,在本节中,将更详细的阐述。在众多特性中,较突出的有三个:

高度模块化:core + modules
DSO:dynamic shared object 模块的动态装/卸载机制
MPM:Multi processing Modules 多进程处理模块,2.4也为动态可装卸

1. 工作模式

MPM定义了httpd的工作模式,包括三种模式:

  1. prefork(非线程型)
    多进程模型,每个进程响应一个请求;两级模型
    一个主进程:负责生成子进程及回收子进程;负责创建套结字;负责接收请求,并将其派发给某子进程处理n个子进程:每个子进程处理一个请求
    工作模式:会预先生成几个空闲进程,随时等待用于响应用户请求,最大空闲和最小空闲;

(1) 主要工做方式:当Apache服务器启动后,mpm_prefork模块会预先建立多个子进程(默认为5个),每一个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将超过预先建立的子进程数时,mpm_prefork模块就会建立新的子进程来处理额外的请求。Apache老是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求,这样客户端的请求就不须要在接收后等候子进程的产生。

(2) prefork在效率上要比worker要高,可是内存使用太多,不擅长处理高并发的场景高并发

  1. worker(多线程多进程)
    多进程多线程模型,每个线程处理一个用户请求,三级模型
    a) 一个主进程:负责生成子进程;负责创建套结字;负责处理请求,并将其派发给某子进程进行处理;
    b) 多个子进程:每个子进程负责生成多个线程
    c) 每个线程:负责响应用户请求

    并发响应数量:m*n
    m:子进程数量
    n:每个子进程所能创建的最大线程数量
    

与prefork的比较:prefork速度要稍高于worker,然而它须要的CPU和memory资源也稍多于worker

  1. event
    事件驱动模型,多进程模型,每个进程响应多个请求;2.4生产环境可用,两级模型
    a) 一个主进程:负责生成子进程;负责创建套结字;负责接收请求,并将其派发给某子进程进行处理
    b) 多个子进程:基于事件驱动机制直接响应多个请求

2. 切换MPM

如果是yum安装的httpd,可以通过修改配置文件/etc/httpd/conf.modules.d/00-mpm.conf进行切换
编译安装的需要修改/usr/local/apache/conf/httpd.conf文件中的

[root@k8s-node-02 apache]# cat conf/httpd.conf |grep mpm
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so

使用哪个工作模式,则取消注释哪个,修改完成后,需要重新启动httpd

通过httpd -M可以查看已启动的模块

[root@k8s-node-02 apache]# httpd -M
Loaded Modules:core_module (static)so_module (static)http_module (static)mpm_worker_module (shared)authn_file_module (shared)authn_core_module (shared)authz_host_module (shared)authz_groupfile_module (shared)authz_user_module (shared)authz_core_module (shared)access_compat_module (shared)auth_basic_module (shared)reqtimeout_module (shared)filter_module (shared)mime_module (shared)log_config_module (shared)env_module (shared)headers_module (shared)setenvif_module (shared)version_module (shared)unixd_module (shared)status_module (shared)autoindex_module (shared)dir_module (shared)alias_module (shared)

httpd -M 显示为shared,例如:编辑/etc/httpd/conf.modules.d/00-proxy.conf,注释某个模块,重启服务,实现卸载,模块在:/usr/lib64/httpd/modules/,第三方模块,后续也配置在此处,使用loadmodule加载

查看Apache加载的模块:httpd -M 或 apachectl -t -D DUMP_MODULES 或 apachectl -M 或 apachectl -l
查看Apache的工做模式:httpd -v 或 httpd -l

3. MPM参数配置

httpd 2.2版本配置文件httpd.conf,2.4大同小异。编译安装和yum安装的配置文件路径,可能略有不同,编译安装的配置文件在/usr/local/apache/conf/extra/httpd-mpm.conf

  1. prefork配置:
<IfModule mpm_prefork_module>StartServers             5MinSpareServers          5MaxSpareServers         10MaxRequestWorkers      250MaxConnectionsPerChild   0
</IfModule>
字段字段含义
StartServers 5httpd服务启动后,创建多少个空闲子进程
MinSpareServers 5最少空闲子进程
MaxSpareServers 10最大空闲子进程
MaxRequestWorkers 250设置了容许同时最大接入的请求数量,任何超过MaxRequestWorkers限制的请求将进入等候队列
MaxConnectionsPerChild 0设置的是每一个子进程可处理的请求数。每一个进程在处理了“MaxConnectionsPerChild”请求后将自动销毁。0意味着无限,即子进程永不销毁。设置为1时可防止意外的内存泄漏。设置为2时表示在服务器负载降低的时候会自动减小子进程数。可根据服务器的负载来调整此值
ServerLimit 256为生命周期内,最多允许子进程数
MaxClients 256最多可创建的子进程数,数值同serverlimit
MaxRequestPerchild 4000每个子进程最多允许处理4000个请求,之后关闭该进程

注:
① MaxRequestWorkers是这些指令中最为重要的一个,设定的是Apache能够同时处理的请求,是对Apache性能影响最大的参数。若是请求总数已经达到这个值(经过ps -ef | grep http | wc -l来确认)那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下不少而http访问却很慢的主要缘由。虽然理论上这个值越大,能够处理的请求就越多,建议将初始值设为以MB为单位的最大物理内存/2,而后根据负载状况进行动态调整。

② prefork控制进程在最初创建“StartServers”子进程后,为了满足MinSpareServers设置的须要建立一个进程,等待一秒钟,继续建立两个,再等待一秒钟,继续建立四个…如此按指数级增长建立的进程数,最多达到每秒32个,直到知足MinSpareServers设置的值为止,这种模式能够没必要在请求到来时再产生新的进程,从而减少了系统开销以增长性能。MaxSpareServers设置了最大的空闲进程数,若是空闲进程数大于这个值,Apache会kill掉一些多余的进程,这个值不要设的过大,但若是设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。若是站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

③ ServerLimit和MaxClients(MaxRequestWorkers)的区别:在Apache时代,控制最大进程数只有MaxClients这个参数,而且这个参数最大值为256,而且是写死了的,试图设置为超过256是无效的,这是因为Apache1时代的服务器硬件是限制的。可是Apache2时代因为服务器硬件的升级,硬件已经再也不是限制,因此ServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients以前,值不要小于Maxclients。

  1. worker配置:
<IfModule mpm_worker_module>StartServers             3MinSpareThreads         75MaxSpareThreads        250ThreadsPerChild         25MaxRequestWorkers      400MaxConnectionsPerChild   0
</IfModule>
字段字段含义
StartServers 4httpd服务启动后,创建多少个空闲子进程
MaxClients 300最多可创建的线程数,数值同serverlimit
MinSpareThreads 75最小空闲数量的工作线程
MaxSpareThreads 250最大空闲数量的工作线程
ThreadPerChild 25每一个子进程产生的线程数量
MaxRequestWorkers 400MaxRequestWorkers设置了容许同时最大接入的请求数量,任何超过MaxRequestWorkers限制的请求将进入等候队列
MaxRequestsPerChild 0无限制

注:
① Worker由主控制进程生成“StartServers”子进程,每一个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。一样,为了避免在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数。而MaxRequestWorkers设置了同时连入的clients最大总数,若是现有子进程中的线程总数不能知足负载,控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250.这两个参数对Apache的性能影响并不大,能够按照实际状况相应调节

② ThreadsPerChild是worker MPM 中与性能相关最密切的指令,ThreadsPerChild的最大缺省值是64,若是负载较大,64位也是不够的,这时要使用ThreadLimit指令,他的最大缺省值是20000

③ Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxRequestWorkers。若是负载很大,现有的子进程数不能知足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也须要显示声明ServerLimit。须要注意的是,若是显示声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxRequestWorkers,并且MaxRequestWorkers必须是ThreadsPerChild的整数倍,不然Apache将会自动调节到一个相应值。

④ 进程与线程的区别(线程是指进程内的一个执行单元,也是进程内的可调度实体)

a、地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有本身独立的地址空间
b、资源拥有:进程是资源分配和拥有的单位,同一进程内的线程共享进程的资源
c、线程是处理器调度的基本单位,但进程不是
d、两者都可并发执行:进程和线程都是由操做 系统所体会的程序运行的基本单元, 系统利用该基本单元实现系统对应用的并发性
e、简单来讲,就是一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率

  1. event模式
<IfModule mpm_event_module>StartServers             3MinSpareThreads         75MaxSpareThreads        250ThreadsPerChild         25MaxRequestWorkers      400MaxConnectionsPerChild   0
</IfModule>

这是Apache最新的工做模式,是worker模式的变种,它把服务进程从链接中分离出来。和worker模式不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题。在event工做模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又容许它释放。这加强了在高并发场景下的请求处理。event模式不能很好的支持https的访问。

2.2.2 主配置文件

编译安装主配置文件:/usr/local/apache/conf/httpd.conf
yum安装:/etc/httpd/conf/httpd.conf

1. 基本配置

ServerRoot "/usr/local/apache" 			#你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录。
PidFile logs/httpd.pid 					#第一个httpd进程(所有其他进程的父进程)的进程号文件位置。
Listen 80 								#服务器监听的端口号。
ServerName localhost:80					#主站点名称(网站的主机名)。
ServerAdmin admin@clusting.com 			#管理员的邮件地址。
DocumentRoot "/usr/local/apache/htdocs"	#主站点的网页存储位置。

2. 站点访问控制常见机制:

文件系统路径模板:

                <Dierctroy "">...</Directroy><FIle "">...</File><FIleMatch "PATTERN">...</FileMatch>

例如:

 <Directory "/mnt/web/clusting"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>

URL路径:

                <Location "">...</Location><LocationMatch "PATTERN">...</LocationMatch>

3. 命令解析

3.1 Options

配置在特定目录使用哪些特性,常用的值和基本含义如下:

    ExecCGI: 在该目录下允许执行CGI脚本。FollowSymLinks: 在该目录下允许文件系统使用符号连接。Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。允许索引 -Indexes强制关掉功能,防止上级目录共享SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。All:启用除了MultiViews的所有选项
3.2 AllowOverride

允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定):

    None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。All: 在.htaccess文件中可以使用所有的指令。
3.3 Order

控制在访问时Allow和Deny两个访问规则哪个优先:

    Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/16)。Deny:拒绝访问的主机列表。
3.4 DirectoryIndex

DirectoryIndex index.html index.html.var 目录索引

3.5 Alias

定义路径别名

#格式:Alias /URL/ "/PATH/TO/SOMEDIR/"Alias /images/ "/usr/share/background/"#加显示授权:<DIrectory "/usr/share/background/>AllowOverride NoneOptions Indexes FollowSymLinksRequire all granted<Directory>
3.6 AddDefaultCharset

设定默认字符集

AddDefaultCharset UTF-8
3.7 日志设定

日志类型: 访问日志和错误日志
① 错误日志:
Errorlog /logs/error_log 符号连接,指向/var/log/httpd/error_log
loglevel warn

② 访问日志:

LogFormat "%h %l %u %t ...." combined 日志格式
LogFormat "%h %l %u %t ...." common    日志格式%h:客户端IP地址
%l:Remote User,通常为一个减号
%u:非为登陆访问时,通常为一个减号
%t:服务器收到请求时的时间
%r:first line of request,表示请求报文首行,记录了此次请求的方法,url及协议版本
%>s:响应状态码
%b:响应报文大小,单位字节
%{Referer}:请求报文中首部"referer"的值,即从哪个页面中的超连结调转至当前页面
%{User-Agent}:请求报文中首部“User-Agent"的值,即发出请求的程序,浏览器版本

4. 配置示例

Direcotry中基于源地址实现访问控制:

4.1 控制页面资源允许所有来源的主机可访问:
http2.2    

Order定义生效次序;写在后面的表示默认法则
Order,allow,deny

                    <Dierctroy "">Order allow,denyAllow from all所有人访问</Directroy>
http-2.4
                    Require<Dierctroy "">Require all granted,允许所有人访问</Directroy>
4.2 控制页面资源不允许所有来源的主机可访问:
http2.2         
                    Order,allow,deny<Dierctroy "">Order allow,denyDeny from all所有人访问</Directroy>
http-2.4
                    Require<Dierctroy "">Require all denied,允许所有人访问</Directroy>
4.3 控制页面资源允许部分来源的主机可访问:
http2.2   

allow from *
deny from *

来源地址:IP,NetAddr:

172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.255.0

                    <Dierctroy "">Order allow,denyDeny from 172.16.0.200 拒绝200访问Allow from 172.16,除了16网段的都拒绝访问</Directroy>
http-2.4

基于IP控制

                        <RequireAll>Require all granted允许所有人访问Require not ip 192.15..,IP地址或网络地址拒绝;<RequireAll>

基于机器名控制:

                        Require host mageedu,主机名或域名;Require not host mageedeu,主机名或域名;

注意要以上放规则,要置于或配置块中

            		 <RequireAll >Require all denied,拒绝所有人访问Require ip 192.15.,IP地址或网络地址;</ RequireAll >

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71885.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目中异常信息的统一处理以及JSR03校验

在项目中&#xff0c;我们经常会对前端传过来的数据判断是否有一些错误&#xff0c;比如&#xff1a;id是否为空&#xff0c;传过来的名称是否合格&#xff0c;如果不符合我们通常会抛出异常&#xff0c;那么小的项目可能每次抛出异常也不是很麻烦&#xff0c;但是对于一个大型…

小程序上新(2022.12.12~2023.02.20)

20221216关于小程序违规收集用户隐私行为的规范20221222优先使用本地版本设置功能上线备注:已和微信官方工作人员确认,开启本地优先后&#xff0c;用户打开小程序过程中&#xff0c;异步去下载新版包&#xff0c;打开完成后&#xff0c;功能是新包,异步下载完成后提示用户重启小…

actipro-winforms-controls-23.1.0 Crack

actipro-winforms一组用于构建漂亮的 Windows 窗体桌面应用程序的 UI 控件&#xff0c;用于构建 IDE 的高级停靠窗口、MDI、属性网格、树控件和文件夹/文件浏览器&#xff0c;用于常见数据类型、自动完成、屏蔽编辑和代码编辑的强大编辑器&#xff0c;功能区、图表、微型图表、…

JavaScript中怎么实现链表?

JavaScript中怎么实现链表&#xff1f; 学习数据结构的的链表和树时&#xff0c;会遇到节点&#xff08;node&#xff09;这个词&#xff0c;节点是处理数据结构的链表和树的基础。节点是一种数据元素&#xff0c;包括两个部分&#xff1a;一个是实际需要用到的数据&#xff1b…

十一、项目实战一

项目实战一 需求 以 前后端不分离的方式实现学生的增删改查操作 学生列表功能 接口设计 url:/students/ 请求方法&#xff1a;get 参数&#xff1a; 格式&#xff1a;查询参数 参数名类型是否必传说明pageint否页码&#xff0c;默认为1sizeinit否每页数据条数默认为10n…

Ansys Zemax | 如何在存在全内反射 (TIR) 的情况下应用散射

在本文中&#xff0c;我们将展示如何利用虚拟表面来对具有全内反射 (TIR) 的物体进行建模&#xff0c;同时保持其他独特的表面特性&#xff0c;例如粗糙的表面结构。 下载 联系工作人员获取附件 简介 在OpticStudio中&#xff0c;全内反射 (TIR) 在其他表面属性&#xff08…

Java:顶级Java应用程序服务器 — Tomcat、Jetty、GlassFish、WildFly

如果你想编写Java web应用程序&#xff0c;首先需要做出一个艰难的决定&#xff1a;选择运行应用程序的Java应用程序服务器。什么是应用服务器?一般来说&#xff0c;应用程序服务器执行Java应用程序。在操作系统中启动它们&#xff0c;然后将应用程序部署到其中。将应用程序服…

07 二叉树

开始系统学习算法啦&#xff01;为后面力扣和 蓝桥杯的刷题做准备&#xff01;这个专栏将记录自己学习算法是的笔记&#xff0c;包括 概念&#xff0c; 算法运行过程&#xff0c;以及 代码实现&#xff0c;希望能给大家带来帮助&#xff0c;感兴趣的小伙伴欢迎评论区留言或者私…

重要节点排序方法

文章目录研究背景提前约定基于节点近邻的排序方法度中心性&#xff08;degree centrality, DC&#xff09;半局部中心性&#xff08;semilocal centrality, SLC&#xff09;k-壳分解法基于路径排序的方法离心中心性 (Eccentricity, ECC)接近中心性 (closeness centrality, CC)K…

【图文详解】Unity存储游戏数据的几种方法

Unity3D存储游戏数据的方式1 PlayerPrefs: Unity自带的一种简单的键值存储系统2 ScriptableObject: Unity中最灵活的数据管理工具2.1 如何手动创建和修改数据文件2.2 ScriptableObject优缺点总结3 JSON: 轻量级的数据交换格式3.1 序列化与反序列化3.2 用JsonUtility对对象进行序…

最好的工程师像投资者一样思考,而不是建设者

我在大学期间住在图书馆。“我学习的教科书理论越多&#xff0c;我就会成为一名更好的工程师&#xff0c;”我想。然而&#xff0c;当我开始工作时&#xff0c;我注意到业内最优秀的工程师并不一定比应届毕业生了解更多的理论。他们只是带来了不同的心态&#xff0c;即投资者的…

STM32单片机蓝牙APP空气净化系统甲醛二氧化碳温度SGP30

实践制作DIY- GC0124-蓝牙APP空气净化系统 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP空气净化系统 功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C最小系统板DS18B20温度传感器OLEDSGP二氧化碳甲醛传感器5V直流风扇多个按键HC-05蓝牙模块&#xff08;仅蓝…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——MapReduce工作流程

1、流程示意图 MapReduce详细工作流程&#xff08;一&#xff09; MapReduce详细工作流程&#xff08;二&#xff09; 2、流程详解 上面的流程是整个MapReduce最全工作流程&#xff0c;但是Shuffle过程只是从第7步开始到第16步结束&#xff0c;具体Shuffle过程详解&#xff0…

二进制部署K8S

目录 一、环境准备 1、常见的k8s部署方式 2、关闭防火墙 3、关闭selinux 4、关闭swap 5、根据规划设置主机名 6、在master添加hosts 7、将桥接的IPv4流量传递到iptables的链 8、时间同步 二、部署etcd集群 1、master节点部署 2、查看证书的信息 2.1 创建k8s工作目…

SQL74 纠错2

描述供应商表Vendors有字段供应商名称vend_name、供应商国家vend_country、供应商省份vend_statevend_namevend_countryvend_stateappleUSACAvivoCNAshenzhenhuaweiCNAxian【问题】修改正确下面sql&#xff0c;使之正确返回SELECT vend_name FROM Vendors ORDER BY vend_name W…

【Redis】数据结构篇

一. String 字符串 常见用途&#xff1a;缓存用户信息&#xff0c;将用户信息结构体使用 JSON 序列化为字符串&#xff0c;然后将序列化后的字符串给 Redis 来缓存 Redis 字符串是动态字符串&#xff0c;是可以修改的字符串 —— 实现类似 ArrayList &#xff1f;&#xff1f…

【自动化测试】自动化测试框架那些事儿

无论是在自动化测试实践&#xff0c;还是日常交流中&#xff0c;经常听到一个词&#xff1a;框架。在教学的过程中&#xff0c;同学们一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料&#xff0c;加上一些实践&#xff0c;算是对“框架”有了一些理解…

什么是生命周期?Activity生命周期的三种状态

什么是生命周期生命周期就是一个对象从创建到销毁的过程&#xff0c;每一个对象都有自己的生命周期。同样&#xff0c;Activity也具有相应的生命周期&#xff0c;Activity的生命周期中分为三种状态&#xff0c;分别是运行状态、暂停状态和停止状态。接下来将针对Activity生命周…

CANopen概念总结、心得体会

NMT网络管理报文&#xff1a; NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文。常见报文说明&#xff1a; 0101---------------网络报文发送Nmt_Start_Node&#xff0c;让电机进入OP模式(此时还不会发送同步信号) setState(d, Operational)------------------开启…

STM32 SystemInit()函数学习总结

拿到程序后如何看系统时钟&#xff1f;User文件夹——system_stm32f4xx程序&#xff0c;先找systemcoreclock(系统时钟&#xff09;但是这里这么多个系统时钟应该如何选择?点击魔法棒&#xff0c;然后点击C/C可以看到define的是F40_41XXX.USE这一款 &#xff0c;对应着就找出了…