基础的服务器 多进程并发 Tftp文件服务器 threading 的多线程并发 socket 服务器的继承模块 基于多线程并发的HTTPServer

服务器模型

硬件服务器

主机 集群

厂商

IBM  HP  联想 浪潮

软件服务器

编写的服务器运行,依托于硬件服务器运行,提供给用户一定的软件服务

软件服务器

分类

webserver   ---- >  网站后端程序提供网站请求的后端处理和响应

httpserever  ---- >  处理HTTP请求,回复http响应

邮箱服务器 ----- >  处理邮件

文件服务器 ----- >  处理文件传输

功能

网络连接,逻辑处理,数据的交互,数据的传输,协议的实现

模型结构

c/s  (客户端服务器模型)

b/s  (游览器服务器模型)

服务器目标

处理速度快、 数据更安全、 并发量大

硬件

更高的配置,集成分布基础,更好的网路速度,更加主机,更好的网路安全性

软件

程序占有更少的资源,更稳定的运行效果,更流畅的运行速度,采用更安全更合适的技术

 

基础的服务器

 

 

循环服务器

意义

单进程程序,循环接受客户端请求,处理请求,每处理完一个请求再去接受下一个请求

优点

实现简单,占有资源少

缺点

无法同时连接多个客户端,当一个客户端长期占有服务器时,形成其它客户端无法操作的情况

使用情况

任务比较短暂,udp套接字更合适

 

 

 

 

并发服务器

意义

同时处理多个客户端的任务请求

 

1、IO并发

IO多路复用   协成

优点

资源消耗少,效率较高,适用于IO类型服务器

缺点

不能监控cpu密集型程序,本质是单进程所以不能长期阻塞消息的收发,IO的监听

 

 

 

2、多进程/多线程并发

意义

为每一个客户端单独提供一个进程或者线程处理请求。由于进程线程执行独立所以对其它进程不会有影响

优点

客户端可以长期占有服务器,操作不会对其它进程线程产生影响

缺点

消耗资源较多

 

 

 

 

 

 

多进程并发

 

 

使用步骤

使用fork 完成并发

  1. 创建套接字,绑定,监听
  2. 等待接受客户端请求 accept
  3. 创建子进程处理客户端请求

父进程继续等待其他客户单连接

  1. 客户端退出则子进程退出

示例:见day04/ 1.py

Tftp文件服务器

 

 

 

功能要求

  1. 客户端有简单的命令提示界面
  1. 根据提示选择相应的功能
  1. 根据提示选择相应的功能

   1) 查看服务器文件库的文件列表(只显示普通文件)

   2) 可以将本地文件上传到文件库中

   3) 可以将本地文件上传到文件库中

   4) 退出

服务器需求

1.处理客户端各自请求

2.允许多个客户端同时访问操作

 

 

解题思路

  1.  技术分析

用什么套接字

答:Tcp

需要什么什么服务器模型

答:多进程并发

需要注意的问题

答:粘包 僵尸进程

数据如何传输

答:文件名传输 注意粘包处理

    文件传输注意传输结尾

  1. 设计整体结构

     要求封装为类,将功能函数写类中

          答:class TFTPServer():

    def  __inif__()

交互套接字

def  do_list()

def  do_get()

def  do_put()

  

 

   main() 函数控制整体流程

创建套接字

接受客户端连接

创建子进程

父进程继续等待连接

 

 

os.listdir(PATH)

 

os.path.isfile(): 判断一个文件的类型是否为普通文件  

os.path.isdir(): 判断一个文件的类型是否为目录

 

threading 的多线程并发

 

每有一个客户端就创建一个新的线程处理客户端请求

 

对比多进程

优点 : 资源消耗少

缺点 : 需要处理共享资源

        注意GIL问题

 

实现步骤

1. 创建套接字,绑定,监听

2. 接收客户端请求,创建新的线程

3. 主线程继续等待其他客户端连接,分支线程执行客户    端请求

4. 处理完客户端请求后,分支线程退出,关闭客户端套    接字

 

socket 服务器的继承模块

 

python2  SocketServer

python3  socketserver

 

功能 : 通过模块的接口完成基于多进程/多线程 tcp/udp的socket并发程序

 

'StreamRequestHandler',    处理tcp请求

'DatagramRequestHandler',  处理udp请求

 

'ForkingMixIn',       建立多进程

'ForkingTCPServer',   建立多进程tcp server

'ForkingUDPServer',   建立多进程udp server

 

'ThreadingMixIn',     建立多线程

'ThreadingTCPServer',  建立多线程tcp server

'ThreadingUDPServer',  建立多线程udp server

 

'TCPServer',    建立tcp server

'UDPServer',    建立udp server

 

 

基于多线程并发的HTTPServer

 

1. 接收浏览器的http请求

2. 对请求进行解析

3. 根据解析判断请求内容

4. 将要返回的内容组织http响应格式发送给客户端

 

升级 :

* 使用多线程并发

* 增加具体请求解析

* 增加数据获取功能

* 封装使用类

 

技术实现 : threading  并发

            tcp socket 传输

    HTTP协议响应和请求的格式

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值