热门标签 | 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事件模型讲解


推荐阅读
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • .htaccess文件 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
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社区 版权所有