【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器

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信息

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第1张图片

1.3.2 获取内存信息

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第2张图片
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第3张图片

1.3.3 磁盘信息

  • 使用psutil类似于linux下的fdisk命令,磁盘的利用率以及I/O信息还有分区信息等
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第4张图片

1.3.4 网络信息

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第5张图片

1.3.5 获得开机时间

image-20220427220356250
image-20220427220402850

1.3.6 小结

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第6张图片

1.4 系统性能定时监控

  • 功能描述(基础版)

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

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

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

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

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

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

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

  • 功能描述(升级版)

1、能够定时显示监控数据
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第7张图片
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第8张图片

  • 如果是模块单独运行,就是__ name __== "__ __ main__"
  • 如果是被当做模块导入,就不能执行main()
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第9张图片

1.4.1 yagmail模块发送邮件

  • yamail模块使用

实现自动发邮件功能
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第10张图片
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第11张图片
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第12张图片
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第13张图片

  • (3)空行

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

    • 只有post方式提交的时候,才有请求数据!
      【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第14张图片
  • 2、请求报文格式总结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第15张图片

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

  • 4、小结

    • 请求报文格式
      • (1)请求行
        • 请求方式 资源路径 协议及版本
      • (2)请求头
        • 协议项
        • 协议名:协议值
      • (3)请求空行
        • 分割请求头和请求的主体
      • (4)请求主体
        • 浏览器要发给服务端的内容
        • GET方式没有请求体,POST方式有请求体

3 基于TCP的Web服务器

3.1模拟浏览器实现

  • 模拟浏览器请求web服务器的网页过程,使用TCP实现HTTP协议(请求报文格式和响应报文格式);
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第16张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第17张图片
    image-20220506145641129
  • 返回的数据如下:(二进制)
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第18张图片
  • 使用decode()解码后,内容如下:
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第19张图片
  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第20张图片

3.2 模拟Web服务器:返回固定数据

  • 目标

    • 实现简单的Web服务器并返回固定数据给浏览器;
      【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第21张图片
  • 整体功能:

    • 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、关闭此次连接的套接字;

  • 代码实现:
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第22张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第23张图片

  • 小结

    • 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服务器;
      【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第24张图片
  • 功能分析

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、关闭此次连接的套接字;

  • 代码实现
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第25张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第26张图片

3.4 模拟Web服务器:返回指定页面

  • 目标
    • 实现根据浏览器不同请求,返回对应网页资源的Web服务器
      *【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第27张图片
      【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第28张图片
      【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第29张图片
  • 功能分析

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、关闭此次连接的套接字;

  • 代码实现
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第30张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第31张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第32张图片
  • 默认首页判断
    image-20220508150938654

3.5 模拟Web服务器:返回指定页面存在的问题

  • 目标
    • 解决资源访问过程中存在的问题
  • 1、如果访问的页面不存在怎么办?
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第33张图片
  • 2、默认首页判断
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第34张图片
  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第35张图片

3.6 面向对象封装

  • 目标

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

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

2、通过对象方法.start()启动web服务器;
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第36张图片

  • 实现思路

1、创建HttpServer类;

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

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

  • 代码实现
    image-20220508155645050
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第37张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第38张图片

3.7 服务端基础架构构建-1

  • 目标

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

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

2、创建app模块文件;

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

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

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

  • 逻辑关系
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第39张图片
  • 文件目录
  • 2、代码实现
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第40张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第41张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第42张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第43张图片

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第44张图片

  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第45张图片

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()函数,得到完整的响应报文;
【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第46张图片

  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第47张图片

3.9 使用终端中启动Web服务器

  • 目标

    • 能够通过终端指定端口并启动Web服务器
    • 服务器没有pycharm,终端启动很重要!!!
  • 1、功能分析
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第48张图片

  • 2、实现思路

1、导入sys模块;

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

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

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

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

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

  • 3、准备工作
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第49张图片

【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第50张图片

  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第51张图片

3.10 案例:网游服务器

  • 目标
    • 利用Web服务器选择发布Web项目
  • 1、功能分析

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

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

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

  • 2、实现思路

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

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

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

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

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

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

  • 3、核心代码
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第52张图片

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

  • 4、代码实现
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第53张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第54张图片
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第55张图片

  • 小结
    【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器_第56张图片

你可能感兴趣的:(Python,服务器,tcp/ip,python)