首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python的Socket知识3:socketserver实现多并发、文件上传下载

socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的scoket服务端。即,每个客户端请求连接到服务器时,socket服务端都会在服务器是创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。类似于酒店的大堂经理,负责分配服务员给客户。

内部调用流程为:

启动服务端程序

执行 TCPServer.__init__方法,创建服务端socket对象并绑定IP和端口

执行 BaseServeer.__init__方法,将自定义的继承自socketserver.BaseRequestHandler 的类 MyRequestHandle赋值给 self.RequestHandlerClass

执行BaseServer.server_forever 方法,while 循环一直监听是否有客户端请求到达

当客户端连接到达服务器

执行ThreadingMixIn.proceess_request 方法,创建一个“线程”用来处理请求

执行 ThreadingMixIn.proceess_request _thread 方法

执行 BaseServer.finish_request 方法,执行 self.RequseetHandlerClass() 即:执行 自定义 myclass的构造方法(自动调用基类 BaseRequestHandler的构造方法,在该构造方法中又会调用myclass的handle方法),其中,myclass为自定义类。

socketserver中的ThreadingTCPSever类对象继承关系:

数字代表执行顺序。

但使用socketserver ,写一个类,比如myclass,继承BaseRequestHandler,且自定义类中必须定义handle方法,且方法名称必须为handle。原因是父类中有一个handle什么都没有做,如果自己定义的类不写handle方法,则会去执行父类的handle方法。

案例1:socketserver 简单实现,链接两个客户端

1)thread_socket_sever

写两个客户端,分别为socket_client1和socket_client2

2)socket_client1

3)socket_client2

执行效果:

client5-1

client5-2

sever显示

案例2:上传下载文件

1、socket_sever,服务器端

2、ftp_客户端

实现效果:

代码案例链接:

链接:https://pan.baidu.com/s/1c3VBfSs 密码:3q25

链接:https://pan.baidu.com/s/1c3cMzIw 密码:noxl

链接:https://pan.baidu.com/s/1brjQq7P 密码:7wgi

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180218G0DGK000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券