一、socketserver模块介绍
Python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD Socket API; 另一个是socketserver,它提供了服务器中心类,可以简化网络服务器的开发
socketserver
socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket服务端。 即,每个客服端请求连接到服务器时,socket服务端都会在服务器上创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。
二、socketserver中的ThreadingTCPServer类
ThreadingTCPServer实现的socket服务器内部会为每个client创建一个“线程”,该线程用来和客户端就行交互 ThreadingTCPServer源码内容:
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass #可以看到ThreadTCPServer类本身并没有方法,而是继承了(ThreadingMinIn, TCPServer) 这两个类。 而TCPServer则是继承了BaseServer类。
三、ThreadingTCPServer的使用方法
1、创建一个继承socketserver.BaseRequestHandler的类
2、类中必须重写一个名为handler的方法
3、实例化一个服务器类,传入服务器的地址和请求处理程序类
4、调用serve_forever()事件循环监听
1 #!/usr/bin/env python3 2 import socketserver 3 4 class Handler(socketserver.BaseRequestHandler): # 必须继承BaseRequestHandler 5 def handle(self): # 必须有handle方法 6 print('New connection:',self.client_address) 7 while True: 8 data = self.request.recv(1024) 9 if not data:break 10 print('Client data:',data.decode()) 11 self.request.send(data) 12 13 if __name__ == '__main__': 14 server = socketserver.ThreadingTCPServer(('127.0.0.1',8009),Handler) # 实例化对象,实现多线程的socket 15 server.serve_forever() # 事件监听,并调用handler方法