HTTP协议和Nginx

一、HTTP协议和Nginx

1.套接字Socket

套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换,SocketAPI出现于1983年BSD4.2实现在建立通信连接的每一端,进程间的传输要有两个标志:IP地址和端口号,合称为套接字地址 socket address

1.客户机套接字地址定义了一个唯一的客户进程

2.服务器套接字地址定义了一个唯一的服务器进程

套接字的系统调用:

socket()创建一个套接字
bind()绑定IP和端口
listen()监听
accept()接收请求
connect()请求连接建立
write()发送
read()接收
close()关闭连接

2.URI

URI(Uniform Resource Identifier ):统一资源标识,分为URL和URN

1.URL

URL是统一资源定位符,用于描述某服务器某特定资源位置

2.URN

URN是统一资源命名

3.URL和URN的区别

URN如同一个人的名称,而URL代表一个人的住址。URN定义某事物的身份,而URL提供查找该事物的方法,URN仅用于命名而不指定地址

4.URL的组成

scheme方案,访问服务器以获取资源时要使用哪种协议
user用户,某些方案访问资源时需要的用户名
password密码,用户对应的密码,中间用:分隔
Host主机,资源宿主服务器的主机名或IP地址
port端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

3.请求访问的完整过程

当用户发起http请求 需要请求index.html网页文件

客户端请求和服务器端建立连接,建立连接后,客户端发送请求报文

服务端网卡收到请求报文,将该报文复制到内核空间(操作系统),内核空间分析报文后交给对应的程序

nginx分析该报文,对比报文和自己的配置文件,按照配置文件完成请求,分析完成后,发现客户需要index.html文件

由于程序的权限问题,没有资格直接调用磁盘上的文件,程序会再将这个请求,再次转发给内核

内核得到请求后,去磁盘中寻找目标文件,找到文件后,复制给程序
程序构建响应报文,构建好后交给内核空间

内核空间得到响应报文后,再交给网卡,发给客户

二、I/O模型处理高并发的时候用

1.I/O模型

同步/异步(消息反馈机制):关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知

同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

同步阻塞:nginx需要自己去问内核是否完成了我交代的任务,而且在接待了一个请求后只有等这个请求结束后才能继续下一个请求

同步非阻塞:指IO操作被调用后立刻告诉内核是否完成了我交代的任务,无需等待IO操作彻底完成,在最终的结果返回前,调用者不会被挂起,可以去做别的事情

2.多路复用I/O型

多路复用I/O模型是一种基于事件驱动的 I/O 处理模式,它利用操作系统提供的多路复用机制(如select、poll、epoll等)来同时监听多个 I/O 事件,当某个事件就绪时,通知应用程序进行处理,通过多路复用I/O模型,可以在一个线程中同时处理多个客户端连接的 I/O 操作,而不需要为每个连接创建一个线程或进程,避免了资源开销和上下文切换的成本。

常见的多路复用I/O模型有:

1.select:适用于连接数不太多的情况,轮询监听多个文件描述符上的 I/O 事件。
2.poll:与select类似,但没有连接数的限制,并且不会修改传入的描述符集合。
3.epoll:适用于连接数非常多的情况,通过事件驱动机制来处理 I/O 事件,可以在大并发情况下具有较高的性能优势。

3.异步I/O模型

异步 I/O 模型是一种非阻塞的 I/O 处理模式,通过回调函数或事件通知的方式来处理已完成的 I/O 操作,能够提高系统的并发性和处理效率

4.事件模型select poll epoll

1.Nginx服务使用异步非阻塞模式:请求不需要排队,会反馈任务的完成结果

2.Apache服务使用同步阻塞模式:请求需要排队,且不会主动返回结果

模型描述优点缺点
select最古老的模型可以同时监视多个文件描述符效率较低,不适用于大规模并发连接
poll类似于select效率相对更高,可以处理大量并发连接随着文件描述符数量的增加,性能下降较明显
epollLinux特有模型在高并发场景下性能表现更好,使用边缘触发方式,只在状态变化时通知在非Linux系统上不可用,涉及到一些操作系统特定的细节和配置
模型区别selectpollepoll
操作方式遍历遍历回调
底层实现数组链表hash表
IO效率每次调用都进行线性遍历,时间复杂度为0(n)每次调用都进行线性遍历,时间复杂度为0(n)事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪的fd放到rdlllist里,时间复杂度O(1)
IO效率1024(x86)2048(x64)无上限无上限
fd拷贝每次调用select都需要把fd集合从用户拷贝到内核态每次调用poll,都需要把fd集合从用户态拷贝到内核态调用epoll ctl时拷贝进内核并保存,之后每次epoll wait不拷贝

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

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

相关文章

理解MySQL核心技术:外键的概念、作用和应用实例

引言 在数据库管理系统(DBMS)中,外键(Foreign Key)是维持数据一致性和实现数据完整性的重要工具。本文将详细介绍MySQL外键的基本概念、作用,以及相关的操作指南和应用实例,帮助读者掌握并灵活…

深入了解PHP的If...Else语句

PHP是目前最流行的服务器端编程语言之一,用于开发动态和交互式网站。在PHP编程中,控制结构是非常重要的概念,它们决定了代码的执行流程。其中,if…else语句是最常用的控制结构之一。本文将深入介绍PHP中的if…else语句&#xff0c…

算子级血缘和血缘查询管理

数据链路 血缘关系 应用场景:数据资产,数据开发,数据治理,数据安全等等 (绿色箭头上面是数据治理) 场景: 数据链路的高效盘点与理解 数仓模型的长效优化机制 风险影响的及时全面分析 重复…

Android Studio无法正确引入包内存在的类

Android Studio 无法识别同一个 package 里的类,显示为红色,但是 compile 没有问题。 重启,rebuild,clean都没有用。 多半是因为 Android Studio 之前发生了错误,某些 setting 出了问题。 解决方法如下: 点击菜单中的…

6月27日-四象限法则

四象限法则,又称为艾森豪威尔矩阵(Eisenhower Matrix),是一种时间管理和任务优先级排序的方法。它将任务分为四个象限,帮助个人识别哪些任务最重要,哪些可以推迟或委托,以及哪些可以完全忽略。以…

【等保2.0超详细解读,收藏这一篇就够了!】

网络安全等级保护是指对国家、法人、其他组织、个人的重要信息,对信息的存储、传输、处理等过程进行的保障。分级保护的基本思路是“分级、按标准、结合技术和管理”,用安全保护和监测预警的方法,对潜在的安全风险进行检测和处理,…

Spring中的InitializingBean接口

使用方法 Slf4j Component public class MyBean implements InitializingBean {public MyBean() {log.info("> 构造方法");}Overridepublic void afterPropertiesSet() throws Exception {log.info("> afterPropertiesSet方法");} }Spring中的Bean注…

生命在于学习——Python人工智能原理(2.4.2)

四、Python的程序结构与函数 4.4 函数 函数能将代码划分为若干模块,每一个模块可以相对独立的实现某一个功能,函数有两个主要功能,分别是降低编程难度和实现代码复用,函数是一种功能抽象,复用它可以将一个复杂的大问…

使用函数open()的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR);if(-1fd){printf("Open file %s failure!,fd…

PyCharm左侧项目区域出现淡黄色背景如何解决

PyCharm左侧项目区域出现淡黄色背景如何解决 解决方法&#xff1a; 1、打开pycharm 文件 - > Setting-> 项目 -> 项目结构 2、添加内容根 为 你的项目根目录即可恢复

什么是港股通?港股通碎股如何进行交易佣金最低万0.8?

港股通是一种投资渠道&#xff0c;它允许符合条件的内地投资者通过内地的证券账户&#xff0c;间接地买卖在香港联合交易所上市的股票。这一机制是沪港通和深港通计划的一部分&#xff0c;旨在促进内地与香港资本市场的互联互通。 ### 港股通的特点包括&#xff1a; - 交易范…

无痛接入FastText算法进行文本分类(附代码)

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

API-其他事件

学习目标&#xff1a; 掌握其他事件 学习内容&#xff1a; 页面加载事件元素滚动事件页面尺寸事件 页面加载事件&#xff1a; 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件。 为什么要学&#xff1f;&#xff1f; 有些时候需要等…

OnlyOffice:为现代工作方式而生的办公套件

ONLYOFFICE官网链接&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice 是一款开源的办公套件&#xff0c;它提供了一系列的办公工具&#xff0c;包括文档编辑器、表格编辑器和演示文稿编辑器。这些工具…

客户案例|某 SaaS 企业租户敏感数据保护实践

近年来&#xff0c;随着云计算技术的快速发展&#xff0c;软件即服务&#xff08;SaaS&#xff09;在各行业的应用逐渐增多&#xff0c;SaaS 应用给企业数字化发展带来了便捷性、成本效益与可访问性&#xff0c;同时也带来了一系列数据安全风险。作为 SaaS 产品运营服务商&…

韩国锂电池工厂火灾:行业安全警钟再次敲响

三天前&#xff0c;6月24日上午&#xff0c;韩国京畿道华城市一电池厂突发火灾&#xff0c;造成严重人员伤亡&#xff0c;其中包括多名中国籍员工。这一事件不仅令人痛心&#xff0c;更为全球锂电池行业安全敲响了警钟。 事发当天&#xff0c;电池厂内堆放锂电池成品的区域突然…

TypeError: %c requires int or char

踩坑&#xff1a;在用python写脚本查询sql数据时&#xff0c;使用%s来替换sql语句里的变量&#xff0c;结果一直报&#xff0c;而其他sql使用同样的方法正常&#xff0c;最后发现是因为sql语句里有模糊查询 like "%测试%"&#xff0c;这里的%被误以为%s&#xff0c;解…

Mendix 创客访谈录|Mendix开发制造业客户复杂应用的强大实力

本期创客 郑立 Eviden中国低代码服务团队负责人 大家好&#xff0c;我是郑立&#xff0c;目前担任Eviden中国低代码服务团队的负责人&#xff0c;Mendix是Eviden中国在低代码领域的最重要的合作伙伴&#xff0c;目前我们在多个制造业客户中推广和实施Mendix低代码项目&#xff…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Linux 中变量的取用与设定

优质博文&#xff1a;IT-BLOG-CN Linux是一个多人多任务的环境&#xff0c;每个人登录系统都能取得一个bash shell&#xff0c;每个人都能够使用bash下达mail这个指令来接收自己的邮箱等等。问题是&#xff0c;bash如何得知你的邮箱是那个文件&#xff1f;这就需要『变量』的帮…