Linux学习104 http服务及IO事件模型讲解

一、Nginx

  1、engine X = Nginx

    a、http协议:web服务器(类似于httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy

    b、NGINX is a free,open-source,high-performance HTTP server and reverse proxy,as well as an IMAP/POP3 proxy server

    c、C10K(10K Connections)

    d、Tengine,OpenResty

  2、http协议

    a、URL:shceme://username:password@host:port/path:params?query#frag

      DocumentRoot:/PATH/TO/SOMEDIR/

        Location:URL

      Alias

      params:

        key=value&key=value

  

      query:

        

    b、http事务

      (1)、request:

        <method><URL><VERSION>

        HEADERS

        <body>

      (2)、response:

        <VERSION><STATUS><REASON-PHRASE>

        HEADERS

        <body>

        name:value

      (3)、Method:GET/HEAD/POST,PUT/DELETE,TRACES,OPTIONS

      (4)、Status Code:

        1xx:

        2xx:成功类响应码,200

        3xx:重定向类的响应码,301,302,304

        4xx:客户端错误:403,404

        5xx:服务端错误,502

      (5)、认证:

        基于ip认证

        基于用户认证:basic/digest

      (6)、httpd MPM:

        prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求

        worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求

        event:主进程master负责生成子进程,每个子进程响应多个请求

  3、I/O模型:

    a、阻塞型,非阻塞型,复用型,信号驱动型,异步

    b、同步/异步:

      (1)、关注消息通知机制

      (2)、消息通知

        同步:等待对方返回消息

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

    c、阻塞/非阻塞型

      (1)、阻塞:blocking,调用结果返回之前,调用者被挂起

      (2)、非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起

    d、一次文件IO请求,都会由两阶段组成

      (1)、第一步:等待数据,即数据从磁盘到内核内存

      (2)、第二步:复制数据,即数据内核内存到进程内存

    e、复用型IO调用

      select():1024,即一个进程最多监控1024个IO。即最多在80上监控1024个请求。我们之所以监控1024个IO是因为研发人员经过多次测试发现监控超过了1024个IO没有意义。性能几乎不会上升。

      poll():没有限制,因此他的性能不比select()好多少

      event-driven:(信号驱动)

        epoll(Linux):libevent这个包提供更多的网络依赖库

        Kqueue(BSD):

        Solaris:/dev/poll

  4、Nginx

    http服务器,反向代理服务器,邮件代理服务器,高性能服务器。

    

原文地址:https://www.cnblogs.com/Presley-lpc/p/13080744.html