http协议,阻塞IO,非阻塞IO,IO多路复用,位运算,select方法

HTTP请求   Request

请求格式:

请求行  
    GET          /         HTTP/1.1
 请求种类    请求内容       协议版本

    请求种类 : GET    获取网络资源
                POST   提交一定的附加数据,得到返回        结果
        HEAD   获取响应头
        PUT     更新服务器资源
        DELETE  删除服务器资源
        CONNECT  预留
        TRACE     测试
        OPTIONS  获取服务器性能

请求头   对请求内容的具体描述

* 以键值对的形式对请求信息进行描述
e.g. 

 Accept: text/html
 Accept-Encoding: gzip, deflate, br
 Accept-Language: zh-CN,zh;q=0.9
 Cache-Control: max-age=0
 Connection: keep-alive

空行

请求体   提交具体的请求参数


HTTP响应    Response

响应格式 

响应行   反馈具体的响应情况

    HTTP/1.1      200        OK
    版本信息     响应码    附加信息
    
    响应码 :  1xx   提示信息 表示请求已经接受
               2xx   响应成功
           3xx   响应需要重新请定向
           4xx   客户端错误
           5xx   服务器错误
    常见响应码 : 200   成功
                      404   请求页面不存在
              401   没有访问权限
              500   服务器发生未知错误
              503   服务器暂时无法执行

响应头   对响应信息的具体描述

e.g.
Cache-Control: private
Connection: Keep-Alive

空行
响应体   将客户想要的内容进行返回

要求 :  知道什么是HTTP协议,功能特点
         知道请求和响应的格式和作用
     知道请求头的种类,基本的响应码的意义
     了解http请求和响应的完整过程

基础的http服务流程程序
1. 接收http请求
2. 给出一定的响应

通过tcp进行文件传输
read --》 send
recv -->  write


IO   input  output 
凡是在内存中存在数据交换的操作都可以认为是IO操作

比如: 内存和磁盘交互       读写 read write
       内存和终端交互       print   input
       内存和网路交互       recv  send  

IO密集型程序 : 程序的执行过程中进行大量的IO操作,而只有较少的cpu运算。消耗计算机资源较少,运行时间长。

CPU密集型程序(计算密集型): 程序运行中需要大量的cpu运算,IO操作较少。消耗cpu资源多,运行速度快

IO分类
阻塞IO   非阻塞IO   IO多路复用   事件IO   异步IO

阻塞IO : 默认形态  效率很低的一种IO

阻塞情况 :  * 因为某种条件没有达到造成的阻塞
                e.g.   input   accept   recv
         
         * 处理IO事件的时间消耗较长带来阻塞
                e.g. 文件的读写过程,网络数据发送过程

非阻塞IO :  通过修改IO事件的属性,使其变为非阻塞状态,即避免条件阻塞的情况

* 非阻塞IO往往和循环搭配使用,这样可以不断执行部分需要执行的代码,也不影响对阻塞条件的判断

设置套接字为非阻塞
s.setblocking()
功能 : 设置套接字的阻塞状态
参数 : 设置为False则套接字调用函数为非阻塞


超时检测

将原本阻塞的IO设置一个最长阻塞等待时间,在规定时间内如果达到条件则正常执行,如果时间到仍未达到条件则结束阻塞。

s.settimeout(sec)
功能 : 设置套接字超时时间
参数 : 设置的时间


IO多路复用

定义 : 同时监控多个IO事件,当哪个IO事件准备就绪就执行哪个IO事件。 此时形成多个IO时间都可以操作的现象,不必逐个等待执行。

准备就绪 : IO事件即将发生的临界状态


import select 

select   ---》 windows   linux  unix
poll  ---》 linux   unix
epoll ---》 linux   unix

r, w, x = select(rlist, wlist, xlist[, timeout])
功能: 监控IO事件,阻塞等待IO事件发生
参数: rlist  列表  存放被动等待处理的IO事件
       wlist  列表  存放需要主动处理的IO
       xlist  列表  存入如果发生异常需要处理的IO
       timeout  超时时间
返回值 : r   列表   rlist中准备就绪的IO
          w   列表   wlist中准备就绪的IO
      x   列表   xlist中准备就绪的IO

注意事项 : 

1. IO多路复用 处理IO的过程中不应有死循环出现,使一个客户端长期占有服务端
2. IO多路复用是一种并发行为,但是是单进程程序,效率较高


位运算

按照二进制位来进行运算操作

&  按位与
|  按位或
^  按位异或
<<  左移
>>  右移

11   1011
14   1110  

11 & 14 --》10
11 | 14 --》15
11 ^ 14 --> 5
11 << 2 --> 44
14 >> 2 --> 3

使用 : 1 在底层做硬件寄存器的操作
        2 做标志位的过滤选择 

1.创建poll对象
p=select.poll()
2.注册关注的IO
p.register(s,POLLIN|POLLHUP)
p.unregister(s)
3.监控IO
events=p.poll()
功能个:监控关注的IO事件
返回值:返回发生的IO事件
events 是一个列表 [(fileno,event),(),()...]
每个就绪IO对应列表中一个元组:(描述符,就绪事件)
IO地图:
{s.fileno():s}
4.处理IO事件
 

猜你喜欢

转载自blog.csdn.net/weixin_42584821/article/details/81805931