热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

21http服务及IO事件模型讲解

web服务的事务过程:客户端通过useragent(浏览器)发起请求,服务端响应(httpd、apache)web服务的核心协议是应用层的http或https协议Nginx:eng
web服务的事务过程:客户端通过user agent(浏览器)发起请求,服务端响应(httpd、apache)

web服务的核心协议是应用层的http或https协议
Nginx:
engine X=Nginx
http协议:web服务器(类似httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy---更多的是应用在reverse proxy
NGINX is a free,open-source,high-performance HTTP server and reverse proxy,as well as an IMAP/POP3 proxy server.
C10K(10K Connections)一万个并发请求Tengine,OpenResty
http协议:URL(统一资源定位符)
URL:shceme://username:password@host:port/path;params?query#frag
br/>Tengine,OpenResty
http协议:URL(统一资源定位符)
URL:shceme://username:password@host:port/path;params?query#frag
shceme:协议http(80)、https(443)、ftp
username:password:获取资源有可能需要认证
host:port:主机地址及进程,端口是用来标识进程的
path:资源路径,通常与文件系统加以映射
DocumentRoot:通常把url叫做location,完成映射以后,url的起始根是你自己定义的本地路径(/path/to/somedir---这是你自己定义的documentroot)---对用户进行限制访问可以基于url来定义(也就是location),也可以基于文件系统路径来定义
Alias:别名,也能来定义路径映射
params:有些路径是动态的,需要添加一些参数(比如附加自己的用户名)
格式:key=value&key=value多个可以用&连接起来
query:传递的查询条件,如果需要从数据库中获取某些数据,需要用到查询条件
格式:filed=value
#frag:定义网页的位置
http事务:
request:
---请求方法(get、post),请求资源的url,协议的版本
HEADERS---name:value格式

        ---请求报文的主体部分,根据方法不同内容会有所变化
    response:
        ---版本、状态码、原因短语
        HEADERS---name:value格式

        
    Method:GET/HEAD(请求资源只希望获得首部)/POST(提交表单),PUT(上传文件)/DELETE(删除文件),TRACE(追踪代理服务器)/OPTIONS(获取一个资源支持的请求方法列表)
    Status Code:
        1xx:基本响应码,没有太大意义
        2xx:成功类响应码,200
        3xx:重定向类的响应码,301,302,304(内容未修改)
        4xx:客户端错误,403,404(未找到)
        5xx:服务器端错误,502
    认证:---http协议也支持认证
        基于IP认证:哪个ip能不能访问,有两种一种是协议自带一种是iptables
        基于用户认证:basic/digest---说的是认证信息在网上传输的格式和认证过程当中,可以简单理解为basic是明文的digest做了校验码认证(有些浏览器支持不完整)
        还有一种表单认证:跟协议没有关系,而是服务器端的应用程序认证
    httpd MPM:---并发响应模型,这三种并非是全部
        prefork:进程模型,两级结构,主进程master负责预先生成子进程(空闲进程),每个子进程负责响应一个请求;一个请求用一个进程来响应---用的就是select()模型
        worker:线程模型,三级结构,主进程master负责生成work子进程,每个子进程负责生成线程,每个线程响应一个请求;对于linux而言,进程线程都是轻量级的。
        event:线程模型,但是没有线程实体,二级结构,主进程master负责生成子进程,每个子进程响应多个请求;

IO模型:
阻塞型、非阻塞型、复用型、(前边3个都是同步的)信号驱动型、异步(这两个是异步的)
同步/异步:
关注消息通知机制;
消息通知:
同步:等待对方返回消息,才能往后走
异步:被调用者通过状态、通知或回调机制通知调用者被调用者的运行状态;不用等待了,继续处理别的事情
阻塞/非阻塞
关注调用者在等待结果返回之前所处的状态;
阻塞:blocking,调用结果返回之前,调用者被挂起---不可中断的睡眠
非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起,会不定时询问
调用有哪些?
程序自己的函数调用,系统调用,用户调用,远程调用(跨主机),同步调用
用户空间调用内核空间的函数(内核级的代码上有很多函数被写成代码库了)被称作系统调用,例如:网络报文发送、硬盘读写

    一次系统IO请求(以磁盘为例),都会由两阶段组成:
        第一步:等待数据,即数据从磁盘到内核内存---最消耗时间
        第二步:复制数据,即数据从内核内存到进程内存
    阻塞型io:两个步骤都阻塞
    非阻塞型io:第一步非阻塞,第二步阻塞
    复用型io调用:---复用型io:依然是阻塞的,没有阻塞在单路io上,而是阻塞在一个io复用器(内核级,帮助监控IO响应)上,意思是进程打算调用两路IO,自己不直接调用磁盘,两路都完成才叫醒进程,两个步骤都阻塞
        select():1024帮助监控1024路io,也就是并发数,超过1024没有意义,性能没有变化,由BSD研发
        poll():没有个数的限制,由unix研发,跟select差不多
    信号驱动型io:第一步非阻塞,第二步阻塞,第一步给对方留一个回掉接口,然后该干嘛干嘛,等信号来了再处理,再阻塞
        event-driven:
            epoll(linux):libevent包
            Kqueue(BSD)
            /dev/poll(Solaris)
    异步:两个步骤都不参与,都不阻塞,直接从内核拿数据使用

阻塞、非阻塞,举个例子:去面馆吃面要不要自己端,视频中还举了律师帮你打离婚官司
主程序调用函数会引入一个新的上下文结构,新的上下文跟原先的主程序没有关系,但是要返回一些执行结果。一般不返回结果是没有办法继续往下运行的。

nginx相当于dnat,但是dnat工作在四层,nginx工作在七层,修改源报文,隐藏后端服务器

2-1-http服务及IO事件模型讲解


推荐阅读
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
author-avatar
球球爱生活0423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有