|
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 做标志位的过滤选择
|