python -- socketserver框架
来源:互联网 发布:网络对青少年的利与弊 编辑:程序博客网 时间:2024/05/17 18:15
SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进 程” 专门负责处理当前客户端的所有请求。
1.ThreadingTCPServer
ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。
ThreadingTCPServer基础
使用ThreadingTCPServer:
创建一个继承自 SocketServer.BaseRequestHandler 的类
类中必须定义一个名称为 handle 的方法
启动ThreadingTCPServer
import socketserverclass Myserver(socketserver.BaseRequestHandler): def handle(self):#具体业务逻辑写在下面 print('from conn:',self.request) while 1: msg=self.request.recv(1024) print(msg.decode()) if msg.decode() == 'q': break self.request.send('wolcome'.encode())s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myserver)s.serve_forever()
源码内部调用流程:
启动服务端程序
执行 TCPServer.__init__ 方法,创建服务端Socket对象并绑定 IP 和 端口
执行 BaseServer.__init__ 方法,将自定义的继承自SocketServer.BaseRequestHandler 的类 - MyRequestHandle赋值给 self.RequestHandlerClass
执行 BaseServer.server_forever 方法,While 循环一直监听是否有客户端请求到达 ...
当客户端连接到达服务器
执行 ThreadingMixIn.process_request 方法,创建一个 “线程” 用来处理请求
执行 ThreadingMixIn.process_request_thread 方法
执行 BaseServer.finish_request 方法,执行 self.RequestHandlerClass() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用 MyRequestHandler的handle方法)
ForkingTCPServer
ForkingTCPServer和ThreadingTCPServer的使用和执行流程基本一致,只不过在内部分别为请求者建立 “线程” 和 “进程”。
http://www.cnblogs.com/zhangkui/p/5655428.html
- python SocketServer 框架编程
- python -- socketserver框架
- Python socket模块编程 SocketServer框架
- python模块介绍- SocketServer 网络服务框架
- python模块介绍- SocketServer 网络服务框架
- python模块介绍- SocketServer 网络服务框架
- python socketserver
- Python SocketServer
- Python::SocketServer
- Python--SocketServer
- Python SocketServer
- Python::SocketServer
- Python::SocketServer
- Python SocketServer
- 利用Python的SocketServer框架编写网络服务程序
- 利用Python的SocketServer框架编写网络服务程序
- python网络编程之TCP通信实例和socketserver框架
- Python SocketServer 分析
- Python中的异常
- 实现加法计算(不用加减乘除运算符)
- 【uva1328】Period
- 文本框实时搜索
- HDU 1879 继续畅通工程
- python -- socketserver框架
- 阿里云短信发送API接口调用
- 随机排列数组
- spring 事务-使用@Transactional 注解(事务隔离级别)
- ARM寄存器与汇编指令详解
- SetTextSize(),getTextSize()单位问题
- 面试常问的深度学习(DNN、CNN、RNN)的相关问题
- php7扩展声明与获取ini配置
- 解决打包上传一直停留在authenticating with the itunes store问题