一、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方法
View Code

相关文章: