Web服务器——————nginx篇

news2024/9/22 11:27:36

一.What is Web服务器 

Web服务器介绍 

Web服务器(Web Server)是指驻留于因特网上某种类型计算机的程序,该程序可以向Web浏览器(如Chrome、Firefox、Safari等)等客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

Web服务器的工作原理可以简单概括为:客户端(如浏览器)通过HTTP(超文本传输协议)向服务器发送请求,服务器接收到请求后,根据请求的内容进行相应的处理(如读取文件、执行程序等),然后将处理结果(如HTML页面、图片、视频等)通过HTTP响应发送给客户端。

Web服务器的主要功能包括:

  1. 提供网页服务:Web服务器最基本的功能就是提供网页服务,即当用户通过浏览器访问网站时,Web服务器会返回相应的HTML页面给浏览器进行展示。

  2. 处理HTTP请求:Web服务器能够解析HTTP请求,并根据请求的内容进行相应的处理。例如,当用户请求一个网页时,Web服务器会找到对应的HTML文件并发送给客户端;当用户请求一个图片时,Web服务器会找到对应的图片文件并发送给客户端。

  3. 管理网站资源:Web服务器负责管理网站上的各种资源,如HTML文件、CSS文件、JavaScript文件、图片、视频等。它可以根据请求的内容,从服务器上找到对应的资源并发送给客户端。

  4. 支持动态内容:除了静态内容(如HTML文件、图片等)外,Web服务器还可以支持动态内容(如PHP、ASP.NET、JSP等脚本语言生成的页面)。当客户端请求动态内容时,Web服务器会执行相应的脚本程序,并将生成的页面发送给客户端。

  5. 支持多种协议:除了HTTP协议外,Web服务器还可以支持其他协议,如HTTPS(安全的HTTP)、FTP(文件传输协议)等。这些协议可以提供更安全或更灵活的数据传输方式。

  6. 负载均衡和集群:在高并发场景下,单个Web服务器可能无法处理所有请求。此时,可以通过负载均衡器将请求分发到多个Web服务器上,形成服务器集群。这样可以提高系统的可用性和扩展性。

常见的Web服务器软件包括Apache、Nginx、IIS(Internet Information Services)等。这些软件各有特点,适用于不同的应用场景和需求。例如,Apache是开源的Web服务器软件,具有高度的可配置性和可扩展性;Nginx则以其高性能和轻量级著称,特别适合于处理高并发请求的场景;IIS则是微软开发的Web服务器软件,与Windows操作系统紧密集成。

 Web服务器————Nginx

What  is  Nginx???

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,由俄罗斯的程序设计师Igor Sysoev使用C语言开发。Nginx以其高效的处理能力、低资源消耗和强大的并发能力而闻名,是许多高流量网站的首选服务器之一。以下是对Nginx的详细介绍:

一、Nginx的特点
  1. 高性能:Nginx可以处理大量的并发请求,官方测试表明其能够支持高达5万个并发连接,这得益于其高效的内存管理和缓存机制。
  2. 轻量级:Nginx的安装包较小,运行时占用的系统资源也非常少,适合在资源有限的服务器上部署。
  3. 高并发:Nginx采用事件驱动的异步架构,能够处理大量并发连接,特别适合处理高并发访问的场景。
  4. 稳定性:Nginx的运行非常稳定,即使在长时间高负载运行的情况下,也很少出现宕机的情况。
  5. 可扩展性:Nginx支持模块化架构,用户可以根据需要安装和管理自定义模块,以实现特定的功能和性能优化。
  6. 配置灵活:Nginx的配置文件非常灵活,用户可以根据需要定制许多方面,如代理、负载均衡、缓存、日志记录等。
二、Nginx的功能
  1. HTTP服务器:Nginx可以作为独立的HTTP服务器,提供静态文件服务、动态内容处理和索引文件等功能。
  2. 反向代理:Nginx支持反向代理功能,可以将请求转发到后端服务器,并处理中间代理和缓存等操作。
  3. 负载均衡:Nginx可以作为负载均衡器使用,将请求分发到多个后端服务器上,从而实现高可用性和可扩展性。
  4. 邮件代理:Nginx同时也是一个非常优秀的邮件代理服务器,支持IMAP/POP3/SMTP服务。
三、Nginx的应用场景
  1. 静态资源服务器:Nginx可以部署为静态资源服务器,提供图片、视频、CSS、JS等静态文件的访问服务。
  2. 负载均衡器:在分布式系统中,Nginx可以作为负载均衡器,将用户请求分发到多个后端服务器上,以提高系统的可用性和扩展性。
  3. 反向代理:Nginx可以作为反向代理服务器,将用户请求转发到内部网络中的Web服务器上,同时提供缓存、压缩等优化功能。
  4. API网关:Nginx可以作为API网关,对外部请求进行鉴权、限流、转发等处理,保护内部服务的安全和稳定。
四、Nginx的安装与配置

Nginx可以在大多数Unix、Linux和Windows系统上安装和配置。安装方式包括使用系统的包管理器(如yum、apt等)进行安装,以及从Nginx官网下载源代码进行编译安装。配置Nginx时,用户需要编辑Nginx的配置文件(通常为nginx.conf),设置服务器监听的端口、请求处理的规则、日志记录的方式等。

五、Nginx的版本与更新

Nginx是一个开源项目,其源代码以类BSD许可证的形式发布。Nginx的开发团队会定期发布新的版本,包括稳定版和主线版。对于新建站点,建议使用最新稳定版作为生产版本;对于已有站点,可以根据实际情况选择是否升级到新版本。

综上所述,Nginx是一款功能强大、性能卓越、配置灵活的Web服务器和反向代理服务器,广泛应用于各种高并发、高性能的Web应用场景中。

How to use  Nginx??

一.下载安装 
 1.准备工作
  • 打开虚拟机,使用finallshell链接Linux操作系统

nginx下载地址icon-default.png?t=N7T8https://nginx.org/点击链接选择版本进行下载 

先安装其依赖软件,最后安装nginx。
依赖工具:pcre-8.3.7.tar.gz       openssl-1.0.1t.tar.gz      zlib-1.2.8.tar.gz       nginx-1.11.1.tar.gz
nginx的http模块使用pcre来解析正则表达式,需要在linux上安装pcre库
nginx使用zlib对http包的内容进行gzip,需要在linux上安装安装zlib库
安装openssl库,让 nginx 支持 https(即在ssl协议上传输http)

2.开始安装 

安装pcre
方式一、wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 。
方拾二、上传源码压缩包,解压、编译、安装 三部曲。
1)、解压文件, 进入pcre目录,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 openssl
下载OpenSSL的地址:
http://distfiles.macports.org/openssl/
1)、解压文件, 回到 openssl目录下,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 zlib
1)、解压文件, 回到 zlib 目录下,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 nginx 
1)、解压文件, 回到 nginx 目录下,
2)、./configure 完成后,
3)、执行命令: make && make install

 3.运行nginx
  • 安装完nginx后,会在 路径 /usr/local 下自动生成 nginx 文件夹。这是自动生成的。
  • 进入这个目录:
cd /usr/local/nginx

  • 进入sbin文件夹,里面有两个文件:nginx 和 nginx.old
  • 执行命令:./nginx 即可执行
  • 测试启动: ps -ef | grep nginx

查看nginx默认端口(默认为80),使用网页的形式测试,
进入目录查看端口:cd /usr/local/nginx/conf 下的 nginx.conf文件。这个文件也是nginx的配置文件。vim 下: 

4.防火墙 

在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题 (1)关闭防火墙(2)开放访问的端口号,80 端口 
查看开放的端口号

firewall-cmd --list-all 

设置开放的端口号

firewall-cmd --add-service=http –permanent 
firewall-cmd --add-port=80/tcp --permanent 

重启防火墙

firewall-cmd –reload 
 二.nginx的平滑升级
1. 为什么要对 nginx 平滑升级

随着 nginx 越来越流行,并且 nginx 的优势也越来越明显,nginx 的版本迭代也来时加速模式,1.9.0版本的nginx更新了许多新功能,例如 stream 四层代理功能,伴随着 nginx 的广泛应用,版本升级必然越来越快,线上业务不能停,此时 nginx 的升级就是运维的工作了 
nginx 方便地帮助我们实现了平滑升级。其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程。 (2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。 (3)新进程接受新请求。 (4)老进程处理完所有请求,关闭所有连接后,停止。 这样就很方便地实现了平滑升级。一般有两种情况下需要升级 nginx,一种是确实要升级 nginx 的版本,另一种是要为 nginx 添加新的模块。

2. Nginx 平滑升级原理

多进程模式下的请求分配方式 

nginx 默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。

信号的接收和处理

nginx 主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。

Nginx信号简介

主进程支持的信号

  • TERM, INT: 立刻退出
  • QUIT: 等待工作进程结束后再退出
  • KILL: 强制终止进程
  • HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
  • USR1: 重新打开日志文件
  • USR2: 启动新的主进程,实现热升级
  • WINCH: 逐步关闭工作进程

工作进程支持的信号

  • TERM, INT: 立刻退出
  • QUIT: 等待请求处理结束后再退出
  • USR1: 重新打开日志文件
3.实验准备 

准备一台初始化的虚拟机

localhostRocky_linux9.4192.168.226.20

关闭防火墙和SElinux 

虚拟机基础配置脚本如下进行步骤前,先跑一遍 

#!/bin/bash
# **********************************************************
# * File Name     : rocky_linux
# * Author        : Elk
# * Email         : zzdict@gmail.com / elk_deer@foxmail.com
# * Create time   : 2024-06-15 20:12
# * Description   : 
# **********************************************************
# 检查是否以 root 用户运行脚本
if [ "$(id -u)" -ne 0 ]; then
  tput bold
  tput setaf 1
  tput setaf 3
  echo "请以 root 用户运行此脚本。"
  tput sgr0
  exit 1
fi
 
# 启用网络接口
enable_network_interface() {
  local interface=$1
  if ip link set "$interface" up; then
    tput bold
	tput setaf 2
    echo "网络接口 $interface 已启用。"
	tput sgr0
  else
    tput bold
	tput setaf 1
    echo "无法启用网络接口 $interface,请检查接口名称。"
	tput sgr0
    exit 1
  fi
}
 
# 配置 YUM 源
configure_yum_repos() {
  sed -e 's|^mirrorlist=|#mirrorlist=|g' \
      -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
      -i.bak \
      /etc/yum.repos.d/Rocky-*.repo	  
  tput bold
  tput setaf 2
  echo "YUM 源配置已更新。"
  tput sgr0
  dnf makecache
  yum -y install epel-release
}
 
# 停止和禁用防火墙,禁用 SELinux
configure_security() {
  systemctl stop firewalld && systemctl disable firewalld
  firewall-cmd --reload
  tput bold
  tput setaf 2
  echo "防火墙已停止并禁用。"
  tput sgr0
  sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  tput bold
  tput setaf 2
  echo "SELinux 已禁用。"
  tput sgr0
}
 
# 检查并安装chrony,进行时间同步
function install_and_sync_time_with_chrony() {
    # 检查是否已经安装chrony
    if ! command -v chronyd &>/dev/null; then
        sudo dnf install -y chrony &> /dev/null
        # 检查安装是否成功
        if ! command -v chronyd &>/dev/null; then
            tput bold
            tput setaf 1
            echo "安装 chrony 失败。请检查您的包管理器并重试。"
            tput sgr0
            exit 1
        else
            tput bold
            tput setaf 2
            echo "chrony 安装成功。"
            tput sgr0
        fi
    else
        tput bold
        tput setaf 2
        echo "chrony 已安装。"
        tput sgr0
    fi
 
    # 确保安装其他必要的软件包
    sudo dnf install -y vim wget unzip tar lrzsz &> /dev/null
    if [ $? -eq 0 ]; then
        tput bold
        tput setaf 2
        echo "其他软件包安装成功。"
        tput sgr0
    else
        tput bold
        tput setaf 1
        echo "安装其他软件包失败。"
        tput sgr0
        exit 1
    fi
}
 
 
    # 启动 chronyd 服务并启用开机启动
    if sudo systemctl start chronyd && sudo systemctl enable chronyd; then
        tput bold
        tput setaf 2
		echo "chronyd 服务已成功启动并设置为开机启动。"
		tput sgr0
    else
		tput bold
		tput setaf 1
        echo "启动或启用 chronyd 服务失败。请检查 systemctl 状态。"
		tput sgr0
        exit 1
    fi
 
    # 强制同步时间
    sudo chronyc -a makestep
	tput bold
    tput setaf 2
    echo "时间同步已成功完成。"
	tput sgr0
}
 
 
# 自定义 IP 地址
configure_ip_address() {
  tput bold
  tput blink
  tput setaf 1
  read -p "******输入你要设置的IP >>>  : " ip_a
  tput sgr0
  tput bold
  tput blink
  tput setaf 6
  read -p "******输入你要设置的网关>>> : " gat
  tput sgr0
  tput bold
  tput blink
  tput setaf 3
  read -p "******输入你要设置的DNS>>>  : " dnns
  tput sgr0
 
  # 判断当前连接的名字
  connection_name=$(nmcli -t -f NAME,DEVICE con show --active | grep -E "ens33|Wired connection 1" | cut -d: -f1)
 
  if [[ "$connection_name" == "ens33" ]]; then
    # 针对 ens33 连接进行配置
    nmcli con mod "ens33" ipv4.method manual ipv4.addresses "${ip_a}/24" ipv4.gateway "${gat}" ipv4.dns "${dnns}" autoconnect yes
  elif [[ "$connection_name" == "Wired connection 1" ]]; then
    # 针对 Wired connection 1 连接进行配置
    nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addresses "${ip_a}/24" ipv4.gateway "${gat}" ipv4.dns "${dnns}" autoconnect yes
  else
	tput bold
	tput setaf 1
    echo "无法识别的网络连接名称:$connection_name"
	tput sgr0
    return 1
  fi
 
  tput setab 5
  tput setaf 15
  tput bold
  echo "IP 地址配置成功,即将重启系统。"
  tput sgr0
 
  nmcli con up "$connection_name"
  reboot
}
 
 
# 主函数
main() {
  local interface="ens33"
  enable_network_interface "$interface"
  configure_yum_repos
  configure_security
  install_and_sync_time_with_chrony
  configure_ip_address "$interface"
}
 
# 调用主函数
main

来到官网下载两个不同的版本 
nginx官网icon-default.png?t=N7T8https://nginx.org/

将下载好的两个安装包上传到虚拟机中

[root@localhost ~]# ll
total 2268
-rw-------. 1 root root     815 Jun  6 14:00 anaconda-ks.cfg
-rw-r--r--  1 root root 1062124 Jun 22 00:38 nginx-1.20.2.tar.gz
-rw-r--r--  1 root root 1244738 Jun 21 21:19 nginx-1.26.1.tar.gz
-rw-r--r--  1 root root    4251 Jun 17 23:50 rocky_linux.sh
4.模拟实验 

安装依赖工具  

[root@localhost ~]# yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel

解压1.20.2版本安装包

[root@localhost ~]# ls
anaconda-ks.cfg  nginx-1.20.2.tar.gz  nginx-1.26.1.tar.gz  rocky_linux.sh
[root@localhost ~]# tar -zxf nginx-1.20.2.tar.gz 

进入解压后的目录

[root@localhost ~]# ls
anaconda-ks.cfg  nginx-1.20.2  nginx-1.20.2.tar.gz  nginx-1.26.1.tar.gz  rocky_linux.sh
[root@localhost ~]# cd nginx-1.20.2
[root@localhost nginx-1.20.2]# ls
CHANGES  CHANGES.ru  LICENSE  README  auto  conf  configure  contrib  html  man  src

预编译 

在这里面,是少两个模块,没写进代码里,用来模拟这样少模块的场景,便于后面升级来扩展。 

[root@localhost nginx-1.20.2]# ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module

编译安装

[root@localhost nginx-1.20.2]# make && make install

创建一个nginx的系统用户

[root@localhost nginx-1.20.2]# useradd --system --no-create-home --shell /sbin/nologin nginx

创建目录用于临时存储客户端请求数据和缓存文件 

[root@localhost nginx-1.20.2]# mkdir -p /tmp/nginx/client_body

启动nginx

[root@localhost nginx-1.20.2]# /usr/local/nginx/sbin/nginx

验证nginx正常工作

[root@localhost nginx-1.20.2]# curl -Ik 192.168.226.20
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Sat, 22 Jun 2024 05:16:03 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 22 Jun 2024 01:00:47 GMT
Connection: keep-alive
ETag: "6676223f-264"
Accept-Ranges: bytes

或者浏览器打开访问改主机IP地址 

三.nginx的常用命令和配置文件 
1. Nginx常用命令 

使用nginx操作命令前提:必须进入到nginx的自动生成目录的下/sbin文件夹下。
nginx有两个目录:
第一个:安装目录

/usr/feng/

第二个:自动生成目录:

/usr/local/nginx/

查看 nginx 的版本号

./nginx -v

启动 nginx

./nginx

关闭nginx

./nginx -s stop

重新加载 nginx 

在目录:/usr/local/nginx/sbin 下执行命令,不需要重启服务器,自动编译。

./nginx -s reload

其他常用命令

cd /usr/local/nginx/sbin/
./nginx  # 启动

# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop

# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit

# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload

# 重新打开日志文件
nginx -s reopen

# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename

# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t

#  显示 nginx 的版本
nginx -v

# 显示 nginx 的版本,编译器版本和配置参数
nginx -V

# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua
2. Nginx配置文件 

 配置文件位置

/usr/local/nginx/conf/nginx.conf

nginx 的组成部分 

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的 内容如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

nginx 配置文件有三部分组成

第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:

worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

比如上面的配置:

events {
    worker_connections  1024;
}

events 块涉及的指令**主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。**
上述例子就表示每个 work process 支持的最大连接数为 1024.

第三部分:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

四.nginx的反向代理 负载均衡
1. 实现效果

浏览器地址栏输入地址 http://208.208.128.122/edu/a.html,负载均衡效果,平均 8081 和 8082 端口中 

2.在 nginx 的配置文件中进行负载均衡的配置
    upstream myserver {
        server 208.208.128.122:8081;
        server 208.208.128.122:8082;
    }
    server {
        listen       80;
        server_name  208.208.128.122;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass   http://myserver;
            #proxy_pass   http://127.0.0.1:8081;
            index  index.html index.htm;
    }
 3.最终测试 
http://208.208.128.122/edu/a.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4-1-3 arduino驱动直流电机(电机专项教程)

4-1-3 arduino驱动直流电机(电机专项教程) 4-1-3 arduino驱动直流电机XY-2.5AD电机控制模块家用直流电源改装成项目制作电源示例程序效果演示 4-1-3 arduino驱动直流电机 Arduino控制直流有刷电机的话,通过H桥电路实现转向控制,以…

C语言——预处理

C语言编译步骤 预处理 编译 汇编 链接 预处理 概念: 预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动来完成;当源文件在编译时,编译器会自动调用预处理程序来…

ESP32神经网络初步使用

摘要 本文档描述了如何使用Python和TensorFlow训练一个简单的神经网络模型来预测正弦函数,并将其部署到ESP32微控制器上。 参考文章 使用Python和Arduino在ESP32上预测正弦函数 - Dapenson - 博客园 (cnblogs.com) 最简单体验TinyML、TensorFlow Lite——ESP32跑…

Android Studio修改默认.m2与Gradle user home缓存位置

Android Studio修改默认.m2与Gradle user home缓存位置 1、修改Gradle user home的方法: android studio配置默认.gradle路径_android studio gradle在哪-CSDN博客文章浏览阅读2k次。当android studio新建一个项目时候,默认的.gradle路径均认为是在c盘的…

若依搭建实践

若依要求版本 JDK>1.8 MySQL>5.7 Maven>3.0 Node >12 Redis >3 一、环境下载及安装 我本地JDK1.8 MySQL9.0.1 Maven3.5.4 Node 20.12.2 Redis 5.0.14.1 在若依官网下载需要的版本,目前若依支持版本有四个,我们根据需要选择对应的版本…

集合及数据结构第五节————ArrayList的介绍和应用

系列文章目录 集合及数据结构第五节————ArrayList的介绍和应用 ArrayList的介绍和应用 什么是ArrayLisArrayList使用简单的洗牌算法杨辉三角 文章目录 系列文章目录集合及数据结构第五节————ArrayList的介绍和应用 ArrayList的介绍和应用 一、ArrayList1.什么是Arra…

鸿蒙 使用 expandSafeArea 实现顶部沉浸式导航

1, 先看效果; // 设置顶部绘制延伸到状态栏.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP]) 2, 直接cv 粘贴代码 // xxx.ets Entry Component struct Example {build() {Column() {Row() {Text().fontSize(40).textAlign(Text…

2_foc转速环_电磁转矩方程与运动方程的传递函数

转速环里面包含有电流环在内,当外面给定转速时,系统通过控制iq来控制电磁转矩,从而电机开始转动。电机在转动的过程,传感器检测到机械角度会改变,也就是说电角度也会改变,由电角度在单位时间的变化&#xf…

【C++ 第十五章】map 和 set 的封装(封装红黑树)

1. map 和 set 的介绍 ⭐map 与 set 分别是STL中的两种序列式容器; 它们是一种树形数据结构的容器,且其的底层构造为一棵红黑树; 而在上一篇文章中提到,其实红黑树本身就是一棵二叉搜索树,是基于二叉搜索树的性质对其增加了平衡的属性来提高其综合性能 ⭐当然也…

ip地址冲突的原因及其解决方法是什么

在当今的信息化时代,网络已成为我们生活和工作中不可或缺的一部分。然而,随着网络设备数量的不断增加,网络管理中的问题也日益凸显,其中IP地址冲突便是常见问题之一。IP地址冲突不仅会导致网络通信不稳定,甚至可能使设…

详解栈和队列

目录: 1.栈 2.队列 一、 栈(Stack) 1.1 概念: 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素的操作。进行插入元素的一端叫做栈顶,另一端叫做栈底。从数据结构的角度出发,栈中…

k8s-deployment控制器

k8s-deployment控制器 1、yaml文件标签学习-指定pod在哪台节点上创建 强制指定pod在指定节点上创建: --- apiVersion: apps/v1 kind: Deployment metadata:name: my-deployment spec:replicas: 3selector:matchLabels:app: web1template:metadata:labels:app: web1…

流媒体服务器二 3学习 librtmp 库的配置使用

librtmp 库是个啥? librtmp是一个开源的基于C语言的库,提供了一个连接RTMP服务器,发送和接收RTMP流的API。 它可以用来开发流媒体播放器,网络直播等应用。它的主要特点是快速、稳定和低延迟。 librtmp支持RTMP,RTMPS…

超越 RAG 基础:AI 应用的高级策略

作者:来自 Elastic Platform Team 我们最近与 Cohere 举办的线上活动深入探讨了检索增强生成 (Retrieval Augmented Genereation - RAG) 的世界,重点讨论了在概念验证阶段之后构建 RAG 应用程序的关键注意事项。我们的演讲者是 Elastic 的首席解决方案架…

使用 Python和 FFmpeg 批量截图视频到各自文件夹中

在这篇博客中,我们将创建一个简单的图形用户界面 (GUI) 工具,利用 wxPython 和 FFmpeg 来从视频文件中批量生成截图。这个工具能够让用户选择一个文件夹,遍历其中的所有视频文件,按照视频长度将其分为四等分,然后为每个…

鸿蒙HarmonyOS之使用ArkTs语言实现自定义Tab菜单栏分页主页面UI

一、效果 显示为3个Tab菜单栏,中间可以滑动 二、实现步骤 1、Index.ets 示例代码中用到的颜色、文字、图片等资源可以自行替换 import { Tab_1 } from ./Tab_1; import { Tab_2 } from ./Tab_2; import { Tab_3 } from ./Tab_3;//主页面 Entry Component stru…

Excel数字中间指定位置插入符号——以120120加*为例

设置单元格格式——自定义 更多阅读Excel数字中间指定位置插入符号_哔哩哔哩_bilibili

B码对时案例分享,基于RK3568J+Logos-2,让电力设备轻松实现“高精度授时”!

本文主要介绍瑞芯微RK3568J紫光同创Logos-2的B码对时案例,开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit Pango Design Suite(PDS):PDS_2022.2-SP3 IRIG-B码对时典型应用 IRIG-B码对时可应用于继电保护装…

台球厅自动控制无人台球之智能开关-SAAS本地化及未来之窗行业应用跨平台架构

一、无人台球厅优点 1. 降低人力成本:无需雇佣大量员工,如收银员、服务员等,节省了工资、福利和管理成本。 2. 24 小时营业:不受人工营业时间限制,可以随时满足顾客的需求,增加营业时长和收入。 3. 便捷高…

不良图片检测

OpenNSFW模型简介 OpenNSFW是一个由 Yahoo 研究院开源的深度学习模型,用于识别和区分网络上的正常内容与不适宜内容(Not Safe For Work)。 项目地址:https://github.com/yahoo/open_nsfw OpenNSFW主要基于Caffe框架实现&#x…