第07章 网络编程考察点

网络协议TCP/UDP/HTTP常考题

浏览器输入一个url中间经历的过程

一个常见的考题,要回答全面不容易
中间涉及到了哪些过程
◆包含哪些网络协议
◆每个协议都干了什么?
不要把自己带坑里,熟悉到哪一层协
议就说到哪一层
物理层、链路层、网络层、传输层、应用层

DNS缓存,host文件解析
浏览器输入一个ur中间经历的过程

TCP三次握手过程



要能独自画出来这个流程

TCP四次挥手过程


TCP/UDP的区别

TCP VS UDP
◆面向连接、可靠的、基于字节流
◆无连接、不可靠、面向报文

学习小提示
本章记忆性内容多。间隔记忆,多次重复。检索学习,穿插练习
◆费曼学习技巧,用简单的语言去教别人,检验自己是否真正懂了
◆假设一个完全不懂这些概念的人,你如何用自己的话解释这个概念
◆如果解释过程中遇到障碍,重新学习这个知识点(分治)

找一张白纸,自己画出来
三次握手并尝试讲解出来

HTTP协议常考题


HTTP请求的组成
HTP协议由哪些部分组成?使用抓包工具去查看和理解
◆状态行
◆请求头
◆消息主体

root@wenyule-zjz:~# pip3 install httpie



HTTP响应的组成

HTTP协议由哪些部分组成?使用抓包工具去查看和理解
◆状态行
◆响应头
◆响应正文

HTTP常见状态码

了解常见的HTTP相应状态码
◆1*信息。服务器收到请求,需要请求者继续执行操作
◆2*成功。操作被成功接受并处理
◆3*重定向。需要进一步操作完成请求
◆4*客户端错误。请求有语法错误或者无法完成请求
◆5*服务器错误。服务器在处理请求的过程中发生错误

Http Get/POST区别

Http Get Vs Post
◆ Restful语义上一个是获取,一个是创建
◆GET是幂等的,POST非幂等
◆GET请求参数放到url(明文),长度限制;POST放在请求体,更安全

GET获取
POST创建
PUT更新
DELETE删除

什么是幂等性

什么是幂等?哪些HTTP方法是幂等的
◆幂等方法是无论调用多少次都得到相同结果的HTP方法
◆例如:a=4是幂等的,但是a+=4就是非幂等的
◆幂等的方法客户端可以安全地重发请求


幂等是指多次请求结果和请求一次结果一样;安全指的是是否会修改数据

什么是HTTP长连接

Http persistent connection Http 1.1
◆短连接:建立连接…数据传输…关闭连接(连接的建立和关闭开销大)
◆长连接:Connection:Keep-alive。保持TCP连接不断开
◆如何区分不同的HTTP请求呢?Content-Length|Transfer Encoding




cookie和 session区别

HTTP是无状态的,如何识别用户呢?
需要在服务端给用户生成一个标识,然后每次让客户端带过去给后端
◆ Session一般是服务器生成之后给客户端(通过url参数或 cookie)
◆ Cookie是实现 session的一种机制,通过 Http cookie字段实现
◆ Session通过在服务器保存 sessionid识别用户, cookie存储在客户端

本章回顾

HTTP重点内容
◆请求和响应的组成
◆常用HTTP方法和幂等性
◆长连接; session和 cookie

网络编程常考题

了解 socket编程对于
学习框架原理比较重要

常见网络编程题

TCP/ UDP socket编程;HTP编程
◆了解TCP编程的原理
◆了解UDP编程的原理
了解如何发送HTTP请求

TCP socket编程原理?

了解 TCP socket编程原理
◆如何使用 socket模块
◆如何建立 TCP socket客户端和服务端
◆客户端和服务端之间的通信








使用socket发送HTTP请求

如何使用socket发送HTTP请求
◆使用socket接口发送HTTP请求
◆HTTP建立在TCP基础之上
◆HTTP是基于文本的协议


IO多路复用常考题


五种Io模型

Unix网络编程中提到了5种网络模型
◆Blocking Io
◆Nonblocking IO

两种不常用
◆ Signal Driven Ic
◆ Asynchronous IO
◆这两种不常用,一般使用IO多路复用比较多


如何提升服务器的并发能力呢?
一些常见的提升并发能力的方式
◆多线程模型,创建新的线程处理请求
◆多进程模型,创建新的进程处理请求
◆IO多路复用,实现单进程同时处理多个 socket请求
线程/进程创建开销比较大,可以用线程池方式解决
线程和进程比较占用资源,难以同时创建太多



什么是IO多路复用?

操作系统提供的同时监听多个 socket的机制
◆ 为了实现高并发需要一种机制并发处理多个 socket
◆ Linux常见的是 select/poll/epoll
◆ 可以使用单线程单进程处理多个 socket





为什么 select就能实现高并发呢?
select可以同时处理多个 socket,有一个就绪应用程序代码就可以处理它

select/poll/epoll 区别

Python如何实现IO多路复用?


Python封装了操作系统的IO多路复用
◆ Python的IO多路复用基于操作系统实现(select/poll/epoll)
◆ Python2 select模块
◆ Python3 selectors模块

selectors模块





Python并发网络库常考题

你用过哪些并发网络库?

Tornado vs Gevent vs Asyncio
◆ Tornado并发网络库和同时也是一个web微框架
◆ Gevent绿色线程( greenlet)实现并发,猴子补丁修改内置 socket
◆ Asyncio Python3 内置的并发网络库,基于原生协程

Tornado框架

Tornado适用于微服务,实现 Restful接口
◆底层基于 Linux多路复用
◆可以通过协程或者回调实现异步编程
◆不过生态不完善,相应的异步框架比如ORM不完善





Gevent

高性能的并发网络库
◆基于轻量级绿色线程(greenlet)实现并发
◆需要注意 monkey patch, gevent 修改了内置的 socket改为非阻塞
◆配合 gunicorn和 gevent部署作为 wsgi server

《Gevent程序员指南》是学习Gevent的一个比较好的资料



Asyncio

基于协程实现的内置并发网络库
Python3引入到内置库,协程+事件循环
◆生态不够完善,没有大规模生产环境检验
◆目前应用不够广泛,基于Aiohttp可以实现一些小的服务

本章回顾

TCP;HTTP;socket编程;Io多路复用;并发网络库
◆TCP和HTTP是重点和常考点
◆了解 socket编程原理有助于我们理解框架的实现
◆并发网络库底层一般都是基于IO多路复用实现

编写一个异步爬虫类

使用 Python的 gevent或者 asyncio编写一个异步爬虫类
◆你可以选择使用 gevent或者 asyncio(推荐),编写一个异步爬虫类
◆要求1:该类可以传入需要抓取的网址列表
◆要求2:该类可以通过继承的方式提供一个处理 response的方法
posted @ 2021-02-21 23:38  元贞  阅读(101)  评论(0编辑  收藏  举报