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,一经查实,立即删除!

相关文章

binlog与redolog的区别

binlog与redolog的区别 在数据库管理系统中,日志系统扮演着至关重要的角色,它记录了数据库的所有更改,从而确保在发生故障时能够恢复数据。其中,binlog(二进制日志)和redolog(重做日志&#xf…

Eureka是什么?它是如何工作的?

Eureka是Netflix开发的服务发现框架,现在是Spring Cloud生态系统的一部分。它主要用于AWS云平台,用来定位服务,以实现中间层服务器的负载均衡和故障转移。在微服务架构中,服务发现是关键的一环,它允许服务和服务彼此发…

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

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

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

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

【Android】怎么创建一个隐藏图标的应用

项目需求 创建一个不带启动图标的app 项目实现 1.低版本上 在低版本的Android系统上面&#xff0c;可以简单使用这个,但是现在很多版本都不适用了。 <activityandroid:name".MainActivity"><intent-filter><action android:name"android.int…

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

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

linux kswapd0进程cpu占用一直居高不下

kswapd0 是 Linux 内核中的一个进程&#xff0c;负责管理虚拟内存和交换&#xff08;swap&#xff09;操作。当该进程的 CPU 占用率居高不下时&#xff0c;通常表示系统正在频繁地进行交换操作&#xff0c;可能由于内存不足或内存使用不合理。 可能原因 内存不足&#xff1a; …

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

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

6月27日-四象限法则

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

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

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

在Vue中v-if如何使用

v-if 是 Vue.js 中的一个指令&#xff0c;用于根据表达式的真假值来有条件地渲染一个元素。当表达式为真值时&#xff0c;元素会被渲染&#xff1b;当表达式为假值时&#xff0c;元素及其子元素不会被渲染。 基本使用 在 Vue 的模板中&#xff0c;你可以使用 v-if 来控制元素…

Spring中的InitializingBean接口

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

Python基础之模块和包讲解

文章目录 1 模块和包1.1 模块和包1.1.1 模块1.1.2 包1.1.3 简单使用 1.2 import 语句1.2.1 import1.2.2 from … import 语句1.2.3 from … import * 语句 1.4 深入模块1.4.1 模块符号表1.4.2 __name__属性1.4.3 dir() 函数1.4.4 作用域 1.5 常用内置模块1.5.1 collections1.5.…

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

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

使用函数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、添加内容根 为 你的项目根目录即可恢复

Linux 相对路径转化为绝对路径 C语言 (realpath函数)

功能简述&#xff1a; 将路径转为绝对路径。函数原型&#xff1a; char * realpath (const char *restrict name, char *restrict resolved) ○ name&#xff1a;原始路径。 ○ resolved&#xff1a;存放规范化路径的地址。可以为 null。 ○ 返回值&#xff1a;正常情况和resol…

什么是港股通?港股通碎股如何进行交易佣金最低万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; 有些时候需要等…