网络编程总结

文章目录

    • 1.浏览器输入一个 url 中间经历的过程
    • 2.TCP,UDP 的区别
    • 3.HTTP 协议
      • HTTP 协议有哪些部分组成?
      • 响应
      • 状态码
      • GET 和 POST 的区别
      • 什么是幂等的
      • 什么是 HTTP 的长链接
      • cookie 和 session 的区别
      • TCP socket 编程原理
    • 4.IO 多路复用
      • 五种 IO 模型
      • 如何提升服务器的并发能力
      • 什么是 IO 多路复用?
      • python 如何实现 IO 多路复用
      • python 并发网络库?

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

DNS 缓存 -> DNS 查询 -> TCP 握手 -> HTTP 请求 ——> 反向代理 Nginx ->uwsgi、gunicom -> web app 响应 -> TCP 挥手

2.TCP,UDP 的区别

  • TCP 面向链接,可靠的,基于字节流
  • UDP 无链接,不可靠,面向报文

3.HTTP 协议

HTTP 协议有哪些部分组成?

  • 状态行
  • 请求头
  • 消息主体
  • curl 和 pip3 install httpie http 请求网页

响应

  • 状态行
  • 响应头
  • 响应主体

状态码

  • 1×× 信息 服务器收到请求,需要请求者继续操做
  • 2×× 成功 操作操作被成功接受并处理
  • 3×× 重定向 需要进一步操作完成请求
  • 4×× 客户端错误 请求有语法错误或者无法完成请求
  • 5×× 服务器错误 服务器在处理请求的过程中发生错误

GET 和 POST 的区别

  • restful 语义上一个是获取一个是创建
  • GET 是幂等的,POST 非幂等的
  • GET 请求参数放在明文中,长度限制,POST 放在请求体中比较安全

什么是幂等的

  • 幂等方法是无论调用多少次都得到相同结果的 HTTP 方法
  • 例如:a=4 是幂等的,a+=4 就是非幂等的
  • 幂等的方法客户端可以安全的重发请求
    在这里插入图片描述

什么是 HTTP 的长链接

  • 短连接: 建立链接 数据传输 关闭链接(链接的建立和关闭)

  • 长连接: Connection:keep-alive 保持 TCP 链接不断开

  • 如何区分不同的 HTTP 请求呢?

    • Content-Length

    • Transfer-Encoding chunked

cookie 和 session 的区别

  • session 一般是服务器生成之后给客户端(通过 URL 参数或者 Cookie)
  • Cookie 是实现 Session 的一种机制,通过 http 的 cookie 字段实现
  • Session 通过在服务器保存 sessionid 来识别用户,cookie 存储在客户端

TCP socket 编程原理

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

4.IO 多路复用

五种 IO 模型

  • 阻塞式 IO
  • 非阻塞式 IO
  • IO 多路复用
  • 信号式 IO
  • 异步 IO

如何提升服务器的并发能力

一些常见的提升并发能力的方式:

  • 多线程模型,创建新的线程处理请求
  • 多进程模型,创建新的进程处理请求
    • 开销大 可以使用线程池和进程池解决
    • 资源占用比较多 难以创建太多
  • IO 多路复用,实现单进程同时处理多个 socket 请求

什么是 IO 多路复用?

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

在这里插入图片描述

python 如何实现 IO 多路复用

  • python 的 IO 多路复用基于操作系统实现(select poll epoll)
  • python2 select 模块
  • python3 selectors 模块

python 并发网络库?

tornado Gevent Asyncio

Tornado 框架

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

Gevent 高性能的并发网络库

  • 基于轻量级绿色线程 (greenlet) 实现并发
  • 需要注意 monkey patch ,gevent 修改了内置 socket 为非阻塞的
  • 配合 gunicorn 和 gevent 部署作为 wsgi server 推荐:《Gevent 程序员指南》

Asyncio

  • 基于协程实现的内置并发网络库

  • python 引入到内置库,协程 + 事件循环

  • 生态不够完善,没有大规模的生产环境检验

  • 目前应用不够广泛,基于 Aiohttp 可以实现一些小的服务

问题: 使用 asyncio 实现一个异步爬虫类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/445225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 基本操作-嵌入式 Linux 入门

在 Ubuntu 基本操作 里面基本就分为两部分: 安装 VMware 运行 Ubuntu熟悉 Ubuntu 的各种操作、命令 如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。 1. 安装 VMware 运行 Ubuntu 我们首先来看看怎么去安装 V…

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除(一)死锁的检测(二)死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,…

通过Annotation将用户操作记录到数据库表功能实现

一、背景 在用户对我们所开发的系统访问的时候,需要我们的系统具有强大的健壮性,使得给与用户的体验感十足。在业务开发的过程中,我们通过将几个相关的操作绑定成一个事件,使得安全性以及数据的前后一致性得到提高。但是在溯源方面…

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板,以及设备树,驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”,点击“文件”,点击“打开文件夹”,点击“zgq”,点击“linux”,点击“atk-mp1”&am…

三角形费马点及深入拓展

三角形费马点及深入拓展 一、费马点的定义 三角形内部满足到三个顶点距离之和最小的点,称为费马点。 二、费马点的证明 比较麻烦的一件事情是,当我们考虑一个三角形的费马点时,我们需要将三角形分为两类: ①三个内角均小于120的三角形 ②有…

【SQL】185. 部门工资前三高的所有员工(窗口函数dense_rank();区分rank()、row_number())

前述 推荐阅读:通俗易懂的学会:SQL窗口函数 题目描述 leetcode题目 185. 部门工资前三高的所有员工 思路 先按照departmentId分组,再按照salary排序 >窗口函数dense_rank() over() select B.name as Department,A.name as Employee,A…

Python 初步了解urllib库:网络请求的利器

目录 urllib库简介 request模块 parse模块 error模块 response模块 读取响应内容 获取响应状态码 获取响应头部信息 处理重定向 关闭响应 总结 在Python的众多库中,urllib库是一个专门用于处理网络请求的强大工具。urllib库提供了多种方法来打开和读取UR…

试用期自我总结报告10篇

试用期自我总结报告(篇1) 一转眼试用期的时间飞快就过去了,在这段时间里我学习到了很多,也把自己在过去学习的东西得已融会贯通。能够来到幼儿园里成为一名老师是我一直以来的目标,而我也终于完成了自己的目标&#x…

Springboot+vue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

如何在RTMP推送端和RTMP播放端支持Enhanced RTMP H.265(HEVC)

技术背景 时隔多年,在Enhancing RTMP, FLV With Additional Video Codecs And HDR Support(2023年7月31号正式发布)官方规范出来之前,如果RTMP要支持H.265,大家约定俗成的做法是扩展flv协议,CDN厂商携手给…

React-Mock数据

1.概念 说明:React中使用Mock数据主要是为了模拟后端接口和数据,以便前端开发可以在没有实际后端支持的情况下进行。 2.实现步骤 2.1安装 npm i -D json-server 2.2准备json文件 {"list":[{"name":"李四","age&q…

【Python】进阶学习:OpenCV--一文详解cv2.namedWindow()

【Python】进阶学习:OpenCV–一文详解cv2.namedWindow() 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望…

编码器-解码器模型(Encoder-Decoder)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 编码器-解码器模型简介 Encoder-Decoder算法是一种深度学习模型结构,广泛应用于自然语言处理(NLP)、图像处理…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot,接下来我来操作一番。 一,创建spring boot工程 勾选下面的选项 紧接着,还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot,项目。 简化目录结构: 我们发现&a…

java中移位<< >> <<< |数据类型转换

移位 x64转换二进制&#xff1a;100 0000 左移2位 &#xff1a; 1000 0000 0 对应十进制 i 256 >>右移 <<左移 >>无符号位右移 关于右移一位相当于整除2 数据类型及其转换 基本数据类型&#xff0c;数据类型范围 byte(-128~127)&#xff08;-2^7~2…

unity学习(54)——选择角色界面--解析赋值服务器返回的信息1

1.decode这种照猫画虎的工作 把逆向出来UserHandler.cs中的内容&#xff0c;融到自建客户端的MessageManager.cs中&#xff1a; 2.此时登录账号&#xff0c;马上显示当前账号下已有三名角色&#xff1a; 此时返回数据包中的command的值是1&#xff1a; 3.当注册玩家数超过三名…

pytorch的理解

工具的查看与使用帮助 1. dir import torch torch.cuda.is_available()dir(torch) dir(torch.cuda) #可以看到有"is_available" 2. help help(torch.cuda.is_available)

python基础——条件判断和循环【if,while,for,range】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下条件判断语句if和循环语句while&#xff0c;for在python中需要注意的地方。 建议已有一定了解&#xff08;对语句的执行逻辑清楚&#xff09;的读者观看&#xff0c;如果对条件判断和循环的执行逻辑不太清楚&#xff0c;也可…

react实战——react旅游网

慕课网react实战 搭建项目问题1.按照官网在index.tsx中引入antd出错&#xff1f;2.typescript中如何使用react-router3.react-router3.1 V63.2 V53.3V6实现私有路由 4.函数式组件接收props参数时定义数据接口&#xff1f;5.使用TypeScript开发react项目&#xff1a;6.要使一个组…

【C++第四课-类和对象下】初始化列表、静态成员函数、静态成员变量、explicit关键字(隐式类型转换)、友元函数、友元类、内部类、编译器的常见优化

目录 再谈构造函数初始化列表初始化列表解决的问题&#xff1a;静态成员函数、成员变量explicit关键字 友元友元函数友元类 内部类编译器的常见优化&#xff08;了解&#xff09;优化1 再谈构造函数 初始化列表 有一些成员变量是无法在函数体内初始化的&#xff0c;eg&#x…