socketserver模块
2016-03-10 17:25
141 查看
socketserver
socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的scoket服务端。即,每个客户端请求连接到服务器时,socket服务端都会在服务器是创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。ThradingTCPServer
ThradingTCPServer实现的socket服务器内部会为每个client创建一个“线程”,该线程用来heels客户端进行交互1,ThradingTCPServer 基础
使用ThradingTCPServer:
创建一个继承 socketserver.BaseRequestHandler 的类
类中必须定义一个名we诶handle 的方法
启动 ThradingTCPServer
代码:
#!/usr/bin/env python3 import socketserver class Server(socketserver.BaseRequestHandler): #$ 必须继承BaseRequestHandler def handle(self): #$ 必须有handle方法 print('New connection:',self.client_address) while True: data = self.request.recv(1024) if not data:break print('Client data:',data.decode()) self.request.send(data) if __name__ == '__main__': server = socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyServer) #$ 实现多线程的socket server.serve_forever() #$ 当前连接断开不会出现关闭或报错,可以与其他客户端继续连接
client端:
import socket ip_port = ('127.0.0.1',8080) sk = socket.socket() sk.connect(ip_port) while True: raw = input('>> ').strip() sk.send(bytes(raw,'utf8')) msg = sk.recv(1024) print(str(msg,'utf8')) sk.close()
2,ThradingTCPServer源码剖析
内部调用流程为:
启动服务端程序
执行 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() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类 BaseRequestHandler的构造方法,在该构造方法中又会调用MyRequestHandler的handle方法)
相关文章推荐
- CSS应用给网页元素的几种方式总结
- 零碎笔记(三)
- TREE KERNELS IN SVM-LIGHT---在svm-light中树核的使用(翻译)
- Linux的4个主要部分:内核、Shell、文件结构和实用工具
- UICC、SIM、USIM、UIM基础
- JS知识点小记
- java 内存溢出的 解决方法!~
- Quartz教程:快速入门
- ecplise建java工程有红色叹号
- 双链表 double_list
- C# 集合
- Spring Hibernate Transaction示例
- phpstrtotime()对于31日求上个月有问题
- Chrome 远程桌面
- 2016/3/10个人总结:当前测试产品(DB)测试用例设计编写总结
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Java概述和开发环境
- iOS9请求https问题
- [C#] 如何分析stackoverflow等clr错误
- Matlab和java混合编程开发