【黑马-python进阶】---学习笔记

【黑马-python进阶】---学习笔记,第1张

1 系统性能定时监控 1.1 系统监控概述

​ 用Python来编写脚本简化日常的运维工作是Python的一个重要用途,在Linux下,有许多系统命令可以时刻监控系统运行的状态;

1.2 psutil

​ **psutilpython system and process utilities缩写,python的系统监控及过程管理的工具,是一个功能强大的跨平台系统管理库。**可以实现命令行中类似ps,top,lsof,netstat,ifconfig,who,df,kill free,nice,ionice,iostant,iotop等等命令的功能,并且以python内置的数据结构形式返回;

1.3 常见功能 1.3.1 获取CPU信息

1.3.2 获取内存信息


1.3.3 磁盘信息
  • 使用psutil类似于linux下的fdisk命令,磁盘的利用率以及I/O信息还有分区信息等
1.3.4 网络信息

1.3.5 获得开机时间


1.3.6 小结

1.4 系统性能定时监控
  • 功能描述(基础版)

1、显示当前服务器CPU的使用率;

2、显示当前服务器内存的使用率;

3、显示当前服务器硬盘的使用率;

4、显示当前服务器网络的收发情况;

5、显示CPU总核心数、总内存、总硬盘;

6、保存日志信息到log.txt文件中;

7、能够直接执行脚本,查看信息;

  • 功能描述(升级版)

1、能够定时显示监控数据

  • 如果是模块单独运行,就是__ name __== "__ __ main__"
  • 如果是被当做模块导入,就不能执行main()
1.4.1 yagmail模块发送邮件
  • yamail模块使用

实现自动发邮件功能



  • (3)空行

    • 用来分离请求头和请求数据,请求头到此结束!!的标志!!
  • (4)请求数据

    • 只有post方式提交的时候,才有请求数据!
  • 2、请求报文格式总结

  • 3、通过网络调试助手模拟TCP服务器,接收request请求

  • 4、小结

    • 请求报文格式
      • (1)请求行
        • 请求方式 资源路径 协议及版本
      • (2)请求头
        • 协议项
        • 协议名:协议值
      • (3)请求空行
        • 分割请求头和请求的主体
      • (4)请求主体
        • 浏览器要发给服务端的内容
        • GET方式没有请求体,POST方式有请求体
3 基于TCP的Web服务器 3.1模拟浏览器实现
  • 模拟浏览器请求web服务器的网页过程,使用TCP实现HTTP协议(请求报文格式和响应报文格式);


  • 返回的数据如下:(二进制)
  • 使用decode()解码后,内容如下:
  • 小结
3.2 模拟Web服务器:返回固定数据
  • 目标

    • 实现简单的Web服务器并返回固定数据给浏览器;
  • 整体功能:

    • 1、Web服务器能够绑定固定端口;

      2、Web服务器能够接收浏览器请求;

      3、Web服务器遵守HTTP协议,并返回“Hello World"字符串给浏览器;

      4、当浏览器关闭后,Web服务器能够显示断开连接;

      5、Web服务器短时间内重启,不会提示address already in use错误;

  • 实现步骤

    • 1、导入socket模块;

      2、创建tcp套接字;

      3、设置地址重用;

      4、绑定端口bind;

      5、设置监听listen,最大允许客户端连接数128(套接字由主动变为被动);

      6、等待客户端连接(能够接收多个客户端连接);

      7、定义函数,实现客户端信息接收和响应;

      8、接收浏览器请求,并判断请求是否为空;

      9、拼接响应报文;

      10、定义变量保存响应报文内容;

      11、发送响应报文给客户端浏览器;

      12、关闭此次连接的套接字;

  • 代码实现:

  • 小结

    • 1、导入模块;
    • 2、创建套接字;
    • 3、设置地址重用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    
    • 4、绑定端口和IP;
    • 5、设置套接字为被动状态,listen;
    • 6、开始接收客户端连接;
    while True:
    	new_client_socket,ip_port=tcp_server_socket.accept()
        request_handler(new_client_socket,ip_port)
    
    • 7、接收客户端发送的请求协议;
    • 8、判断客户端是否已经下线;
    • 9、拼接响应报文(响应行+响应头+响应空行+响应主体);
    • 10、发送响应报文;
    • 10、关闭和当前客户端连接;
3.3 模拟Web服务器:返回固定页面
  • 目标
    • 实现返回一个固定的html页面给浏览器的Web服务器;
  • 功能分析

1、Web服务器能够绑定固定端口;

2、Web服务器能够接收浏览器请求;

3、Web服务器遵守HTTP协议,并返回网页index.html的内容给浏览器;

4、当浏览器关闭后,Web服务器能够显示断开连接;

5、Web服务器短时间内重启,不会提示address already in use错误;

  • 实现步骤

1、导入socket模块;

2、创建套接字;

3、设置地址重用;

4、绑定端口IP(服务器必须要做的);

5、设置监听模式,最大允许客户端连接数128,套接字有主动变为被动;

6、等待客户端连接(能够接收多个客户端连接)

7、定义函数,实现客户端信息接收和响应;

8、接收浏览器请求,并判断请求是否为空;

9、拼接响应报文;

10、定义变量保存响应报文内容;

11、打开Index.html文件,并且读取其内容返回给客户端;

12、发送响应报文给客户端浏览器(注意转码问题);

13、关闭此次连接的套接字;

  • 代码实现

3.4 模拟Web服务器:返回指定页面
  • 目标
    • 实现根据浏览器不同请求,返回对应网页资源的Web服务器
      *

  • 功能分析

1、Web服务器能够绑定固定端口;

2、Web服务器端能够接收浏览器请求;

3、Web服务器遵守HTTP协议,根据请求返回指定的html内容给浏览器;

4、当浏览器关闭后,Web服务器能够显示断开连接;

5、Web服务器短时间内重启,不会提示address already in use错误;

  • 实现思路

1、导入socket模块;

2、创建tcp套接字;

3、设置地址重用;

4、绑定端口ip地址;

5、设置监听,最大允许客户端连接数128(套接字主动变被动);

6、等待客户端连接(能够接收多个客户端连接);

7、定义函数,实现客户端信息接收和响应;

8、接收浏览器请求,并判断请求是否为空;

9、拼接响应报文;

10、定义变量保存响应报文内容;

11、获取浏览器发送的请求头信息,分析得到请求html文件路径;

12、根据路径信息,打开指定html文件,并返回内容给客户端浏览器;

13、发送响应报文给客户端浏览器,注意转码问题;

14、关闭此次连接的套接字;

  • 代码实现


  • 默认首页判断
3.5 模拟Web服务器:返回指定页面存在的问题
  • 目标
    • 解决资源访问过程中存在的问题
  • 1、如果访问的页面不存在怎么办?
  • 2、默认首页判断
  • 小结
3.6 面向对象封装
  • 目标

    • 使用面向对象思想,对Web服务器进行封装
  • 功能分析

1、使用面向对象思想进行封装;

2、通过对象方法.start()启动web服务器;

  • 实现思路

1、创建HttpServer类;

2、创建HttpServer类的构造方法,并在构造方法中对tcp_server_socket创建初始化;

3、创建start()方法,用来web服务器启动;

  • 代码实现


3.7 服务端基础架构构建-1
  • 目标

    • 优化代码,分模块开发
  • 1、整体功能

1、创建框架构建相关的文件夹;

2、创建app模块文件;

3、在app模块文件中创建application函数(用于处理请求);

4、将request_handler()中的处理逻辑交由app模块的application函数完成;

5、app模块的application函数返回响应报文;

  • 逻辑关系
  • 文件目录
  • 2、代码实现



  • 小结
3.8 服务端基础框架构建-2
  • 目标
    • 优化代码,分模块开发
  • 1、整体功能

1、创建框架构建相关的文件夹;

2、创建app模块文件;

3、在app模块文件中创建application函数(用于处理请求);

4、将request_handler()中的处理逻辑交由app模块的application函数完成;

5、app模块的application函数响应数据;

6、创建utils模块,并且在该模块中创建create_http_response()函数,专门用来拼接响应报文;

7、在app模块的application函数中调用utils模块中的create_http_response()函数,得到完整的响应报文;

  • 小结
3.9 使用终端中启动Web服务器
  • 目标

    • 能够通过终端指定端口并启动Web服务器
    • 服务器没有pycharm,终端启动很重要!!!
  • 1、功能分析

  • 2、实现思路

1、导入sys模块;

2、通过sys.argv获取参数列表;

3、判断列表长度是否为2,如果不等于2要给出提示,Web服务器启动失败;

4、取出第二个参数,判断是否是一个数字,如果不是一个数组,给出提示,Web服务器启动失败;

5、接收启动参数端口号;

6、修改类构造方法,使用提供的端口号启动Web服务器;

  • 3、准备工作

  • 小结
3.10 案例:网游服务器
  • 目标
    • 利用Web服务器选择发布Web项目
  • 1、功能分析

1、使用浏览器打开指定地址;

2、游戏运行方启动服务器,选择要发布的游戏

3、客户端刷新浏览器即可畅玩新的游戏;

  • 2、实现思路

1、定义初始化项目的方法;

2、定义字典保存项目路径 字典格式:key=项目名称 value=路径

3、循环获取字典中的所有Key;

4、根据Key获取游戏的主目录;

5、设置实例属性,保存主目录;

6、修改Web服务器的目录为实例属性保存的主目录;

  • 3、核心代码

  • enumerate会将列表变成一个带索引的元组数组

  • 4、代码实现


  • 小结

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/904383.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-15
下一篇2022-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存