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不拷贝

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

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

相关文章

mac配置修改host文件

1command 空格 输入 terminal 选中回车进入终端控制台. command 空格 2 sudo vi /etc/hosts 输入密码,进入vi编辑器修改文件 sudo vi /etc/hosts3修改内容,:wq保存退出,重启项目即可 :wq

全景图片/老照片/动漫图片一键无损放大与修复

在日常生活中,我们经常使用系统自带的图片处理软件来对图片进行缩放操作,从而实现放大或缩小图片。然而,这种方法会带来一个问题:如果原始图片较小,放大后会导致精度损失,使图片变得模糊。 近年来&#xf…

Radxa 学习摘录

文章目录 一、参考资料二、硬件知识 一、参考资料 技术论坛(推荐) 官方资料下载 wiki资料 u-boot 文档 u-boot 源码 内核文档 内核源码 原理图 二、硬件知识 Radxa 3B 主板概览 MIPI接口 MIPI CSI(Camera Serial Interface)…

MemManage_Handler 问题的解决思路

1、问题 在做一个安全类项目时发现,软件在运行一段时间后会进入"MemManage_Handler",遂开始了一系列查找。 2、解决 (1)查看堆栈数据 查堆栈的数据,发现堆栈也被破坏了,看不出来是执行哪个任务执行导致的…

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本&…

centos上快速搭建zfile文件网站

什么是zfile? zfile文件网站是最方便快捷的在线目录展示程序,支持将本地文件、FTP、SFTP、S3、OneDrive 等存储在网站上展示并浏览! 本教程参考: https://docs.zfile.vip/install/os-linux复现 今天的搭建环境是centos7.9 第一…

CPPTest设计分析

目录 1 概述2 设计3 扩展Output3.1 扩展实例 1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。 CppTest下载地址Sourceforge Github地…

Java技术栈总结:数据库MySQL篇

一、慢查询 1、常见情形 聚合查询 多表查询 表数据量过大查询 深度分页查询 2、定位慢查询 方案一、开源工具 调试工具:Arthas运维工具:Prometheus、Skywalking 方案二、MySQL自带慢日志 在MySQL配置文件 /etc/my.conf 中配置: # …

云原生技术峰会:引领智能算力时代的创新浪潮

云原生技术峰会:引领智能算力时代的创新浪潮 随着云计算技术的飞速发展和智能算力的不断提升,云原生架构已成为推动企业数字化转型的重要力量。一场汇聚了业界顶尖专家和学者的云原生技术峰会成功举行,与会者共同探讨了云原生在智能算力时代…

python3用两个栈实现一个队列

栈与队列 栈:先入后出,First In First Out (FIFO) ,类似桶(入到桶底、取从桶顶) 队列:先入先出,First In Last Out (FILO) 用两个栈实现一个队列 两个桶(栈)&#x…

Shell 编程入门

优质博文:IT-BLOG-CN 【1】x.sh文件内容编写: 固定开头:#!/bin/sh; 【2】学习的第一个命令就是echo输出的意思; 【3】其实shell脚本也就是在文件中写命令,但是我们要写的是绝对路径&#xff1a…

Web渗透:逻辑越权漏洞

逻辑越权漏洞(Business Logic Vulnerability)是指攻击者利用应用程序业务逻辑中的漏洞,绕过正常的安全控制,执行未授权的操作。与常见的技术性漏洞不同,逻辑越权漏洞通常与应用程序的功能和流程有关,需要对…

Java初识集合(后续不断补充)

第一次更新时间:2024.6.26 集合概述 Java中的集合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意的数据类型,并且长度可变。其中,这些…

使用go语言来完成复杂excel表的导出导入

使用go语言来完成复杂excel表的导出导入(一) 1.复杂表的导入 开发需求是需要在功能页面上开发一个excel文件的导入导出功能,这里的复杂指定是表内数据夹杂着一对多,多对一的形式,如下图所示。数据杂乱而且对应不统一。…

基于单片机和 Arduino 平台的六自由度可控机械手臂

摘 要 : 为了降低机械手臂的设计开发难度 , 并使之尽早地投入应用 , 设计一种基于单片机和 Arduino 平台的六自由度可控机械手臂 。提出六自由度可控机械手臂的控制方案, 给出机械手臂控制系统的结构框图 。 详细设计六自由度可控机械手臂…

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP体检预约管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…

2024华为数通HCIP-datacom最新题库(变题更新⑤)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

MATLAB-遗传GA-CNN-SVM,基于GA遗传优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-遗传GA-CNN-SVM,基于GA遗传优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据,直接替换数据就可以运行程序。 2.所有程序都经过验证,保证程序可以运行。 3.具有良好的编程习惯&#xf…

linux centos rabbitmq3.7.5 一键安装部署

linux centos rabbitmq3.7.5 一键安装部署 一、基础理论二、kafka和rocketmq、rabbitmq的区别三、下载所需安装包四、一键安装 一、基础理论 RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件,其作用主要体现在以下几个方面&a…

Docker 查看源地址/仓库地址,更改

一、源地址文件配置路径。若有docker文件夹,没有json,可以新增,复制进去内容 /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com",&q…