http协议----基于请求报文和响应报文完成一次http事务

应用层协议格式有两种: 文本(开发容易,但交互解析困难如http smtp),二进制(交互解析容易,但理解起来困难memocache)

状态码:304 已经请求过,但是资源没什么改变返回304;对于get请求,只返回head,以表示资源有没有

缓存:在速度不匹配之间的网络组件之间添加缓存以达到性能最优。请求首部中的if-Modified-Since,If-None-Match是关键信息

user-agent加载的仅仅是web框架,资源家在的过程就是向服务器请求的过程,如果一个页面有很多url,逐一请求主机的话,浪费时间,就需要通过缓存提高加载速度,如果是多核资源,可能并发2个请求

所以,对于服务器,可能同时接受到2个或多个请求,但这可能来自同一个请求客户端!!!

现如今,服务器面对的成千上万的并发也就毫不奇怪了,常见的优化方式:例如看到第一屏,(只加载第一屏,除非添加滚轮),或者压垮所有服务。

pv:整个页面有很多请求(链接),通过日志数据挖掘做广告投放和用户行为分析,虽然有站长统计工具,但大型网站最好自行统计pv;计算标准是访问一个网站入口后能完整的呈现页面就算是一个pv

uv:独立IP,日uv,一天内有多少独立ip地址发起过页面访问

为了客户端打开页面时尽可能的快:通常的做法有:加载缓存和并发访问,不过现如今浏览器都是多线程的,任意浏览器对于单个域名线程数是有上限的,例如访问域名A,开启两个线程,访问域名B,开启两个线程

所以对于同一网站可以设置多个二级域名,并把资源,如图片,视频,文本文件分散部署到各二级域名的方法来实现一个站点开启多线程的方式达到访问效率的优化。

httpd mpm多路处理模块有三种模式:prefork 主进程以管理员身份启动生成多个子进程,可以监听80端口,凡小于1024端口号的谓之特权端口

  • I/O类型:所谓I/O,一方请求服务,另一方调用服务,那么,请求方如何得知什么时候得知自己的请求被响应了呢(如何通知调用者)

同步synchronous:调用发出后,不会立即返回,一旦返回,则返回最终结果

异步asychronous调用发出后,被调用方立即反馈消息,但并非最终结果,被调用者通过回调函数,状态信息,通知机制等通知调用方处理结果(银行服务,拿到排队号,被叫号的过程)

上述关注的是消息通知的机制

------------------------------------------------------

以下关注的是请求发出者等待被调用者返回结果时的状态

阻塞block:调用者没结果一直出等待状态,被挂起

非阻塞non-block:调用者不会被阻塞

  • 阻塞式I/O blocking I/O:一个进程通常只能处理单步I/O
  • 非阻塞式I/O:盲等待,polling模型正基于此,过一段时间就去咨询是否完成,效率不一定优于阻塞,所谓非阻塞,是指从磁盘加载数据到内核空间这一段;从内核内存复制到应用进程阶段仍是阻塞的
  • I/O多路复用,一个进程只能处理单步I/O,以向服务器请求资源为例,一步负责监听请求(网络I/O),一步负责请求数据,由于从内核空间复制数据到应用进程内存时处于阻塞状态,这时进程处于“不可终止睡眠状态”,即使网络I/O发生异动也不可能作出响应,按理说,在请求时间过长时,我们也无法取消请求,可现实生活中的例子告诉我们,我们确实可以取消请求,这就是多路复用I/O(无非是在网络请求和磁盘请求之间添加了一个“代理”,代i理会转发请求给空闲的进程,支持两路以上的复用----这就是select() 由BSE研发 poll()和select()功能一致,但是局限在于1024条请求,尽管可以改代码,但实际上1024是并发的极限,超出后拒绝服务,select是复用代理)---其实还得阻塞,只不过可以分身干点别的
  • 事件驱动式I/O:被调用者会回复调用者-----你的请求我拿到了,10分钟后ok,你可以先干点别的,这就免去了盲等(这一阶段一个进程可以处理n个请求);然而第二步从内核内存到进程内存的过程依然阻塞;一旦收到就绪的通知,会调用回调函数完成后续的操作(callback),对于进程阻塞在处理请求而无法接收完成通知的情况下,有两种机制完成通知,水平触发(通知多次)和边缘触发(通知一次,而后调用回调函数,犹如端面)
  • 异步I/O:从磁盘load数据到内核内存,再从内核内存复制到应用进程内存后通知调用方就绪,进程打包响应报文。对并发支持好,编程复杂度高

httpd是典型的事件驱动模型服务器,版本2.4以后还支持异步I/O模型,通常数据加载完成后,会缓存在内存里,所以多个请求请求同一数据的时候,其优势是显而易见的

一个典型的应用进程发起I/O请求的步骤

向内核空间请求数据-------->内核没有------>向磁盘请求数据------>把磁盘数据复制到内核内存----->再把数据拷贝到应用进程内存(每个应用进程都有各自独立的空间);真正的I/O过程就是从内核复制数据到应用进程内存的那一步

综上所述,prefork,worker基于多路复用I/O,event基于事件驱动模型,nginx服务器基于事件驱动模型,基于边缘触发,支持异步I/O,内存映射机制进行数据发放,一个进程可处理5000到1万个请求,随你而定,当然不是越高越好

http协议和i/o模型的更多相关文章

  1. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  2. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  3. (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

    1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...

  4. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

  5. 页面解耦—— 统跳协议和Rewrite引擎

    原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...

  6. http协议和web应用有状态和无状态浅析

    http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it   我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...

  7. 在线聊天室的实现(1)--websocket协议和javascript版的api

    前言: 大家刚学socket编程的时候, 往往以聊天室作为学习DEMO, 实现简单且上手容易. 该Demo被不同语言实现和演绎, 网上相关资料亦不胜枚举. 以至于很多技术书籍在讲解网络相关的编程时, ...

  8. http协议和web本质

    转载:http://www.cnblogs.com/dinglang/archive/2012/02/11/2346430.html http协议和web本质 当你在浏览器地址栏敲入“http://w ...

  9. oracle网络服务之beq协议和SDU优化(性能提升可达30%)

    oracle网络服务之beq协议和SDU优化(性能提升可达30%) 12.3.1  BEQ协议 如果Oracle数据库服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接采用进程间直接通信,不 ...

随机推荐

  1. JQuery II

    jQuery事件的绑定 <body> <button>点击1</button> <button>点击2</button> </body ...

  2. 业务型代码常用的SQL汇总(随时更新)

    做了一年的业务代码开发,记录并分享一下自己平时在项目中遇到的比较好用的sql 1.查询表中是否某一字段下的数据有重复数据(以ID为例) SELECT id FROM 表名GROUP BY ID HAV ...

  3. (转)arcengine+c# 修改存储在文件地理数据库中的ITable类型的表格中的某一列数据,逐行修改。更新属性表、修改属性表某列的值。

    作为一只菜鸟,研究了一个上午+一个下午,才把属性表的更新修改搞了出来,记录一下: 我的需求是: 已经在文件地理数据库中存放了一个ITable类型的表(不是要素类FeatureClass),注意不是要素 ...

  4. OpenStack组件——RabbitMQ消息队列

    1.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...

  5. 【VUE】vue在vue-cli3环境下基于axios解决跨域问题

    网上的绝大部分教程解决vue+axios跨域问题都不能直接适用vue-cli3.这是因为vue-cli3不一样的配置方式导致的. 如果是使用vue-cli3构建的项目,那么默认是没有config.js ...

  6. rtsp学习----海康RTSP客户端连接深入分析

    转载于:http://blog.csdn.net/zhouyongku/article/details/41546789 海康相机RTSP连接代码分析 最近在做海康相机rtsp连接获取音视频的工作,现 ...

  7. [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?

    http://www.techweb.com.cn/it/2019-07-10/2743776.shtml 国产的linux 用centos源的 如何是好呢.. 蓝色巨人IBM官方宣布,已经正式完成对 ...

  8. [转帖]Docker常用命令总结

    Docker常用命令总结 http://www.ha97.com/5546.html 发表于: Linux, 互联网, 虚拟化与云计算 | 作者: 博客教主 标签: docker,常用命令,总结 PS ...

  9. 在 sys.servers 中找不到服务器 '10.0.2.13'。请验证指定的服务器名称是否正确。

    工作中,因为需要,搭建同事的程序模块,附加了从同事那里拷过来的该程序使用的库.(C#.C/S..Net Framework4.0 .WCF.Win10.SQL Server 2014.VS2015) ...

  10. expect批量分发密钥对

    vim shell.exp #!/usr/bin/expect set timeout 10 set hostname [lindex $argv 0] set username [lindex $a ...