企业高性能web服务器

目录

一、web服务介绍

1.1 Web 服务访问流程

1.2 Web 服务器类型

1.3 Apache常用工作模式

1.3.1 Apache prefork 模型

1.3.2 Apache worker 模型

1.3.3 Apache event 模型

【补充】

子进程角色主要负责以下:

二、Nginx 架构和安装

2.1 Nginx 编译安装示例

2.2 平滑升级和回滚示例

2.2.1 平滑升级

 2.2.2 回滚

2.3 Nginx 配置文件

三、案例

3.1 示例:nginx的用户认证

 3.2 示例:nginx中的文件检测

3.3 示例:nginx长链接控制

3.4 示例:nginx下载服务器

3.5 nginx的压缩功能

3.6 nginx的反向代理负载均衡

3.7 nginx和php的整合


一、web服务介绍

1.1 Web 服务访问流程

1) 用户发起请

  • 输入URL:用户在浏览器中输入目标网站的URL/点击链接。                                             
  • 请求构建:浏览器根据URL构建HTTP请求报文,包括请求行、请求头部等。

2) DNS解析

  • 域名查询:浏览器首先通过DNS系统解析URL中的域名,将其转换为对应的IP地址。这一过程可能涉及递归和迭代查询。                                                                                                        
  • 地址获取:一旦获取到IP地址,浏览器就知道向哪个服务器发送请求。

3) TCP连接建立

  • 三次握手:浏览器与Web服务器之间通过TCP协议建立连接。这一过程包括三次握手,确保双方建立起可靠的连接。                                                                                                                
  • 连接建立:一旦连接建立,浏览器就可以通过这条连接发送HTTP请求报文。

4) HTTP请求发送

  • 发送请求:浏览器通过TCP连接将HTTP请求报文发送给Web服务器。                                    
  • 请求处理:Web服务器接收到请求后,根据请求的内容进行相应的处理。

5) 服务器处理请求

  • 静态内容处理:如果请求的是静态内容,Web服务器直接从文件系统中读取这些内容。       
  • 动态内容处理:如果请求的是动态内容(如数据库查询结果、用户提交表单的响应等),Web服务器可能需要调用后端应用服务器来处理请求,并可能涉及到数据库的读写操作。

6) HTTP响应返回

  • 生成响应:Web服务器或后端应用服务器处理完请求后,生成HTTP响应报文,包括响应行、响应头部和响应体。                                                                                                                   
  • 发送响应:Web服务器通过TCP连接将HTTP响应报文发送给浏览器。

7) 浏览器解析和渲染

  • 接收响应:浏览器接收到HTTP响应后,开始解析响应内容。                                                  
  • 内容渲染:根据响应头部中的Content-Type判断响应内容的类型,并调用相应的解析器对内容进行解析和渲染。                                                                                                                     
  • 页面显示:浏览器将解析和渲染后的页面内容显示给用户。

8) TCP连接关闭

四次挥手:页面加载完毕后,浏览器和Web服务器之间通过TCP四次挥手机制安全关闭连接。

1.2 Web 服务器类型

Web服务器是使用HTTP和其他协议 来响应 通过万维网发出的 客户端请求 的 软件和硬件。

1) Apache

是世界上最流行的Web服务器之一,支持多种操作系统。                                                             

特点:Apache的源代码开放,有强大的开发团队支持,支持跨平台应用,可移植性好,且模块支持丰富。尽管在速度和性能上可能不及某些轻量级Web服务器,但其功能全面且稳定。

2) Nginx

一款高性能的HTTP和反向代理服务器,以其高并发处理能力和低资源消耗著称。                       

特点:Nginx能够处理高达5万个并发连接,同时保持低内存和CPU占用。它支持负载均衡、缓存、SSL/TLS加密和虚拟主机等功能,是许多大型网站的首选。

3) IIS

IIS是由微软开发的Web服务器,只能在Windows操作系统上运行。                                             

特点:IIS与微软的其他产品集成良好,支持SSL/TLS加密和虚拟主机等功能。它使得在Windows平台上发布和管理Web应用程序变得简单。

4) Tomcat

一个开源的Java Web应用软件容器,用于运行Servlet和JSP Web应用程序。                             

特点:Tomcat基于Java,提供了对Java Web应用程序的完整支持。然而,它在处理静态文件和高并发请求时可能表现较弱。

1.3 Apache常用工作模式

1.3.1 Apache prefork 模型

Apache Prefork 模型是一种经典且稳定的多进程服务器模型,它通过预先生成子进程来准备处理客户端请求。

优点:先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求不需要担心线程安全问题。

缺点:一个进程相对占用资源,消耗大量内存,不擅长处理高并发。

适用场景

①Apache Prefork 模型适用于访问量不是很大的场景,或者对稳定性和可靠性有较高要求的场景。                                                                                                                                               

②在高并发环境下,可能需要考虑使用更高效的模型(如 Worker 模型或 Event 模型)来优化性能。

1.3.2 Apache worker 模型

worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。

1.3.3 Apache event 模型

与worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。

【补充】

主进程角色主要负责以下:

初始化与配置:主进程负责Apache服务器的启动和初始化工作,包括读取配置文件、设置监听端口、初始化必要的系统资源等。根据配置文件中的参数,主进程会创建指定数量的子进程,并为每个子进程分配固定数量的线程。

请求监听与分发:主进程或其中一个子进程中的监听线程负责监听来自客户端的请求。当请求到达时,监听线程会根据负载均衡策略将请求分发给可用的子进程中的线程进行处理。

监控与管理:主进程持续监控着子进程和线程的健康状况,包括运行状态、内存使用情况、处理请求的速度等。如果发现某个子进程或线程出现异常或崩溃,主进程会采取相应的恢复措施。

动态调整:主进程会根据服务器的负载情况动态地调整子进程和线程的数量。如果现有子进程和线程无法处理所有请求,主进程会启动新的子进程以增加处理能力。如果负载降低,主进程会减少不必要的子进程和线程以节省资源。

子进程角色主要负责以下:

请求处理:子进程中的线程负责实际处理客户端请求。每个线程在某个确定的时间只能维持一个连接,并处理该连接上的所有请求。

资源共享与隔离:子进程之间通过系统提供的机制进行资源共享和隔离。每个子进程都拥有独立的内存空间和其他系统资源,以确保它们之间的独立性。

稳定性与恢复:子进程在运行时可能遇到各种异常情况,如内存泄漏、死锁等。当主进程检测到某个子进程出现问题时,会尝试重启该子进程以恢复其正常功能。

二、Nginx 架构和安装

2.1 Nginx 编译安装示例

1)去官网下载所需源码包 .tar.gz,然后解压...

eg:tar zxf nginx-1.24.0.tar.gz 

2)创建一个系统服务账户nginx,用于运行 Nginx。

useradd -s /sbin/nologin -M nginx

3)编译和安装 Nginx前,安装这些软件包。

dnf install gcc pcre-devel zlib-devel openssl-devel -y

3)配置Nginx的源代码安装过程中的 ./configure脚本,它可以指定Nginx安装和编译时的多个选项。(根据需求指定选项)

[root@nginx-node1 nginx-1.24.0]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module

 5)源代码编译安装软件包:

[root@nginx-node1 nginx-1.24.0]# make && make install

 nginx完成安装以后,有四个主要的目录

## conf :保存 nginx 所有的配置文件,其中 nginx.conf nginx 服务器的最核心的配置文件,其他的.conf 则是用来配置 nginx 相关的功能的。

## sbin:保存nginx二进制启动脚本,不同的参数以实现不同的功能。

6)(非必要)将Nginx的可执行文件目录(/usr/local/nginx/sbin)添加到环境变量PATH中:这样,我们可以在任何地方通过输入nginx的命令(nginxnginx -s reload)来运行Nginx,而不需要完整的路径。

vim ~/.bash_profile
'''
        export PATH=$PATH:/usr/local/nginx/sbin
'''
source ~/.bash_profile

最后可以通过 nginx -V 命令来验证版本及编译参数。

2.2 平滑升级和回滚示例

2.2.1 平滑升级

目的:在不中断服务的情况下,更新Nginx到新版本或应用新的配置。这样做可以确保在升级过程中,用户的访问不受影响,服务的稳定性和可用性得到保障。

1、从官网下载并解压一个新版的源码包 :
tar zxf nginx-1.26.2.tar.gz

2、编译新版本的Nginx,但不要执行make install命令,以避免覆盖原有的Nginx文件。

 ./configure --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
make
3、
# 把之前的旧版的 nginx 命令备份
cd /usr/local/nginx/sbin/
cp nginx nginx.old
# 把新版本的 nginx 命令复制过去
\cp -f /root/nginx/nginx-1.26.2/objs/nginx     /usr/local/nginx/sbin

检测一下:

4、#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的 nginx。

#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80。

#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

kill -USR2 49723
ps aux | grep nginx

 已经有nginx服务在执行,直接nginx不能启动新的,使用kill -USR2才可以:

5、回收旧版本

kill -WINCH 49732
ps aux | grep nginx

检测版本信息:变成了新版本的。

 2.2.2 回滚

如果升级的版本发现问题需要回滚, 可以重新拉起旧版本的 worker。
mv nginx.old nginx
kill -HUP 49732
kill -WINCH 49800
检测一下:

2.3 Nginx 配置文件

nginx.conf主配置文件)是Nginx 的核心配置文件,包含了全局配置、事件配置、http 配置……这个文件是 Nginx 启动时读取的主要文件,用于设置 Nginx 的工作特性,如工作进程数、日志路径、HTTP 服务器配置等。

mime.typesMIME 类型文件)文件定义了 HTTP 响应中 Content-Type 字段与文件扩展名之间的映射关系。Nginx 使用这个文件来确定当文件被请求时应该使用哪种 MIME 类型来响应。

fastcgi.conffastcgi_paramsFastCGI 相关配置)这些文件包含了与 FastCGI 服务器交互时所需的参数。Nginx 可以通过 FastCGI 与多种后端应用通信。fastcgi.conf 可能包含一些特定于 FastCGI 的指令,而 fastcgi_params 则包含传递给 FastCGI 服务器的参数列表。

proxy.confproxy_paramsProxy 相关配置)这些文件定义了 Nginx 作为反向代理服务器时的行为。它们包含了与代理功能相关的指令和参数,如负载均衡设置、代理头部传递等。

站点特定配置文件:比如 sites-available/ 和 sites-enabled/ 目录下的文件。——Nginx 通常使用 sites-available/ 和 sites-enabled/ 目录来管理站点特定的配置。sites-available/ 目录包含所有可用的站点配置文件,而 sites-enabled/ 目录则包含实际启用的站点配置文件的符号链接。

三、案例

3.1 示例:nginx的用户认证

1、创建日志目录

2、

#设置网页:在 /data/web/ 目录下创建了一个名为 folian 的目录,然后在该目录下创建一个名为 index.html 的文件,并向该文件写入 folian

[root@nginx-node1 ~]# mkdir /data/web/folian

[root@nginx-node1 ~]# echo folian > /data/web/folian/index.html

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf

[root@nginx-node1 ~]# nginx -s reload  #重启生效

3、设置不是谁都能访问:即用户认证;访问者需要通过认证才能看到内容。

关键参数:

auth_basic "login password !!";

auth_basic_user_file "/usr/local/nginx/.htpassword";

实现!! 

 3.2 示例:nginx中的文件检测

 创建目录:

编辑配置文件:

测试:

3.3 示例:nginx长链接控制

下载测试工具:dnf install telnet -y

通过修改长连接请求次数:可以?

 

keepalive_timeout  #长链接等待时间,即没有数据传输的时间。

keepalive_timeout  65 60; 当等待时间有两个参数时:真正保持时间65、 客户看到时间60。

测试看看:

如果不设置那个(客户看到时间)值:则看到的是keep-alive。

3.4 示例:nginx下载服务器

#ps: download 不需要  index.html  文件
mkdir -p /webdata/nginx/folian.org/folian/download
cp /root/anaconda-ks.cfg
/webdata/nginx/folian.org/folian/download
vim /usr/local/nginx/conf.d/vhosts.conf
重启Nginx并访问测试下载页面

3.5 nginx的压缩功能

Nginx 支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT 支出,不过会占用相应的CPU 资源。Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module, 默认是内置模块。
# 启用或禁用 gzip 压缩,默认是关闭的
 vim /usr/local/nginx/conf/nginx.conf
gzip on;   #启用 gzip 压缩
gzip_comp_level 5;
gzip_min_length 1k;
……
# 重启 Nginx 并访问测试:
#输入 测试字符 到页面,测试 小于 1k 的文件是否会压缩:

3.6 nginx的反向代理负载均衡

环境:启动两台虚拟机作为后端服务器(web1-172.25.254.10 web2-172.25.254.20);nginx(172.25.254.100)作为代理服务器。

部署后端 Apache 服务器:
[root@web1 ~]# yum install httpd -y
[root@web1 ~]#  echo "web1 172.25.254.10" > /var/www/html/index.html
[root@web1 ~]#  systemctl enable --now httpd
[root@web2 ~]# yum install httpd -y
[root@web2 ~]#  echo "web2 172.25.254.20" > /var/www/html/index.html
[root@web2 ~]#  systemctl enable --now httpd
访问测试:
[root@localhost ~]# curl http://172.25.254.10
web1 172.25.254.10
[root@localhost ~]# curl http://172.25.254.20
web2 172.25.254.20
配置 nginx 反向代理:
注意 : 实验过程中先关闭缓存
vim  /apps/nginx/conf/conf.d/pc.conf
upstream webserver {
        server 172.25.254.10:80 weight=1 fail_timeout=15s max_fails=3;
        server 172.25.254.20:80 weight=1 fail_timeout=15s max_fails=3;
}
server {
        listen 80;
        server_name www.folian.org;
        location ~ / {
                proxy_pass http://webserver;
        }
}
#重启Nginx 并访问测试
[root@localhost ~]#  curl www.folian.org
172.25.254.10 web
[root@localhost ~]#  curl www.folian.org
172.25.254.20 web
#关闭172.25.254.20172.25.254.30,测试nginx backup服务器可用性:
[root@localhost ~]# while true;do
curl http://www.folian.org;sleep 2;done

3.7 nginx和php的整合

源码编译 php:
yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libcurl-devel 
yum install libpng-devel.x86_64
wget https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
dnf install -y oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
 
make && make install
php 相关配置优化:
[root@nginx-node1 ~]# cd /usr/local/php/etc/
[root@nginx-node1 etc]# ls
php-fpm.conf.default  php-fpm.d
[root@nginx-node1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@nginx-node1 etc]# vim php-fpm.conf
去掉注释 :pid = run/php-fpm.pid    #指定 pid 文件存放位置
[root@nginx-node1 etc]# cd php-fpm.d/
[root@nginx-node1 php-fpm.d]# cp www.conf.default www.conf
生成主配置文件:
[root@nginx-node1 php-fpm.d]# cd /root/php-8.3.9/
[root@nginx-node1 php-8.3.9]# 
[root@nginx-node1 php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini
[root@nginx-node1 php-8.3.9]# cd
[root@nginx-node1 ~]# vim /usr/local/php/etc/php.ini 
 
date.timezone = Asia/Shanghai # 修改时区
配置php加载memcache模块:
[root@nginx-node1 ~]# cd /usr/local/php/etc/php-fpm.d/

[root@nginx-node1 etc]# vim php.ini 
生成启动文件:
[root@nginx-node1 ~]# cd php-8.3.9/
[root@nginx-node1 php-8.3.9]# cp sapi/fpm/php-fpm.service /lib/systemd/
 
[root@nginx-node1 php-8.3.9]# vim /lib/systemd/php-fpm.service 
# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by
this unit.
#ProtectSystem=full    # 注释该内容
[root@nginx-node1 php-8.3.9]#  systemctl start php-fpm.service
[root@nginx-node1 php-8.3.9]#  netstat -antlupe | grep php
*********
准备 php 测试页面:
[root@nginx-node1 ~]# mkdir -p /data/php

[root@nginx-node1 ~]# vim /data/php/index.php
[root@nginx-node1 ~]# cat /data/php/index.php
<?php
phpinfo();
?>
部署:memecached
[root@nginx-node1 ~]# yum install memcached -y
[root@nginx-node1 ~]# systemctl enable --now memcached
访问web测试:

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

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

相关文章

Maven的依赖范围

依赖的jar包&#xff0c;默认情况下&#xff0c;可以在任何地方使用&#xff0c;可以通过scope来设置作用范围 作用范围&#xff1a; 主程序范围有效&#xff08;main文件夹范围内&#xff09;测试程序范围有效&#xff08;test文件夹范围内&#xff09;是否参与打包运行&…

投资伦敦银一般看什么点位做单?

伦敦银的价格走势不断变化&#xff0c;无论投资者选择做多还是做空&#xff0c;进场的点位都不是一成不变的&#xff0c; 如果投资者想找到胜率比较高的进场点位&#xff0c;可以尝试在走势图中找出银价的支撑与压力位所在&#xff0c;然后在压力位附近布局空单&#xff0c;在…

fastadmin 安装

环境要求&#xff0c;大家可以参考官方文档的&#xff0c;我这里使用的是phpstudy&#xff0c;很多已经集成了。 注意一点&#xff0c;PHP 版本&#xff1a;PHP 7.4 。 第二步&#xff1a;下载 下载地址&#xff1a;https://www.fastadmin.net/download.html 进入下载地址后…

SpringBoot依赖之Spring Data Redis 实现地理坐标(Geospatial)

Spring Boot 项目中使用 Spring Data Redis 实现地理坐标(Geospatial) 概念 Spring Data Redis (AccessDriver) 依赖名称: Spring Data Redis (AccessDriver)功能描述: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Sup…

如何制作统信UOS启动盘?

如何制作统信UOS启动盘&#xff1f; 一、下载UOS系统安装镜像二、在UOS系统环境下制作启动盘步骤一&#xff1a;准备U盘步骤二&#xff1a;打开启动盘制作工具步骤三&#xff1a;选择ISO镜像文件步骤四&#xff1a;选择安装介质并格式化步骤五&#xff1a;等待制作完成 三、在W…

Redis 技术详解

一、Redis 基础 &#xff08;一&#xff09;为什么使用 Redis 速度快&#xff0c;因为数据存在内存中&#xff0c;类似于 HashMap&#xff0c;查找和操作的时间复杂度都是 O(1)。支持丰富数据类型&#xff0c;支持 string、list、set、Zset、hash 等。支持事务&#xff0c;操…

AScript 的UI asui模板的导入

两种方案&#xff1a; 第一种直接在web端&#xff0c;右击UI文件夹 第二种在pycharm&#xff0c;也是右击UI文件夹 调用UI&#xff0c;在init类中直接调用即可

Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)

scient scient一个用python实现科学计算相关算法的包&#xff0c;包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…

Aria2安装和使用-Mac版

起因是需要网盘下载&#xff0c;无奈限速很烦&#xff0c;查找很多方案后&#xff0c;最终决定使用Aria2 Tampermonkey。 其中Aria2是一款开源轻量的下载软件&#xff0c;简单来说就是可以通过URL直接下载。 Tampermonkey则是一款插件&#xff0c;我这里是.crx结尾的谷歌插件…

文件IO函数:open/close,read/write,lseek

open和close函数 C语言中的文件IO操作需要使用到open()函数和close()函数来打开和关闭文件。 open()函数的原型如下&#xff1a; int open(const char *pathname, int flags); int open(const char *filename, int flags,mode_t mode);其中&#xff0c;filename表示要打开…

性能优化理论篇 | swap area是个什么东西

我们知道每台计算机的内存&#xff08;RAM&#xff09;都是有限的&#xff0c;而我们的应用程序需要加载到内存才能被运行&#xff0c;如果一台机器运行多个应用程序时&#xff0c;内存可能会耗尽。Linux 系统中的“交换空间&#xff08;也称为交换分区&#xff09;”可以帮助缓…

Google Play开发者账号地址验证难题?这些经验或许能帮到你

目前&#xff0c;想要把应用顺利上架到 Google Play&#xff0c;已经不像以前那么简单了&#xff0c;主要是开发者需要应对 Google 日益严格的审核机制。其中&#xff0c;账号验证的地址验证绝对是让很多人头疼的一个环节。 今天就来给大家分享一些真实的经验和干货&#xff0c…

IA实验:静态路由(1基础版)

实验拓扑&#xff1a; 实验要求&#xff1a; 1.实现全网通 实验思路&#xff1a; 1.给各个设备配置好端口的IP地址并且划分广播域&#xff0c;暂定网段为&#xff1a; 192.168.1.0 192.168.2.0 192.168.3.0 2.pc1去ping各网段的设备以及端口&#xff0c;发现3.0网段以及2.2网…

数控单主轴走心机多少钱

单主轴走心机的价格因品牌、型号、性能及配置等因素而异&#xff0c;因此无法给出一个具体的统一价格。一般来说&#xff0c;单主轴走心机的价格在数万元到数十万元不等。 市场上某些品牌的单主轴走心机价格可能在十几万之间不等&#xff0c;而另一些高端型号或定制产品的价格可…

苹果上架没有iphone、没有ipad也可以生成截屏

使用flutter、uniapp或其他跨平台框架开发ios的APP&#xff0c;上架的时候都会遇到一个问题&#xff0c;上架的时候需要各种尺寸的设备来做ios截屏。 比如目前最新的要求是&#xff0c;iphone需要三种不同尺寸的设备的截屏&#xff0c;假如支持ipad则还需要使用ipad 2代和ipad…

从0开始搭建个人博客《第十一期:优化网站访问速度》

目录 一、背景说明 二、Nginx性能优化 &#xff08;一&#xff09;文件句柄 1.系统全局性修改和用户局部性修改 2.进程局部性修改 &#xff08;二&#xff09;CPU亲和配置 1.设置工作进程数 2.设置连接数 &#xff08;三&#xff09;事件处理模型优化 &#xff08;四&…

MySql 高阶 概念(了解即可)

mysql 分为4层结构&#xff1a; 连接层&#xff1a;负责处理链接&#xff0c;鉴权&#xff0c;安全。 服务层&#xff1a;负责sql接口&#xff0c;sql分析&#xff0c;sql优化&#xff0c;sql缓存。 引擎层&#xff1a;负责执行服务层的操作&#xff0c;不同的引擎拥有不同的特…

《机器学习》一元、多元线性回归的实现 No.4

一、一元线性回归实现 先直接看完整代码&#xff1a; import pandas as pd import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegressiondate pd.read_csv(data.csv) #导入数据plt.scatter(date[广告投入],date[销售额]) # 用散点图展示数据 plt.sh…

这对二婚夫妻结婚半年,一起生活才一个月,就走到了婚姻尽头!

这对二婚夫妻结婚半年&#xff0c;一起生活才一个月&#xff0c;就走到了婚姻尽头&#xff01; 这是一篇涉离婚纠纷的民事起诉状 &#xff08;范文点评&#xff09; 离 婚 起 诉 状 原告&#xff1a;韩某斌&#xff0c;男&#xff0c;现年37岁&#xff0c;汉族&#xff0c;打…

记录一个变量溢出的bug

文章目录 如题 如题 count2变量溢出了&#xff08;超过了255&#xff09;&#xff0c;结果导致busOff_16bitRecordHILTime变量莫名其妙被清0