socketserver 模块简化了编写网络服务程序的任务;同时 SocketServer 模块也是 Python标准库中很多服务器框架的基础。
socketserver 模块可以简化网络服务器的编写。Python把网络服务抽象成两个主要的类,一个是 Server 类,用于处理连接相关的网络操作,另外一个则是 RequestHandler 类,用于处理数据相关的操作;并且提供了两个Mixin类,用于扩展 Server,实现多进程或多线程。
Server 类:
它包含了种五种server类,BaseServer(不直接对外服务)。TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,
即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用(AF_unix)。
RequestHandler类:
所有requestHandler都继承BaseRequestHandler基类。
注: 全双工管道通信:既可以 收,也可以 发
单工、半双工和全双工的区别: https://blog.csdn.net/starstar1992/article/details/53032409
socketserver 的使用方法:
import socketserver """ socketserver: 基于多线程实现的并发通信 sockerserver 使用方法(固定套路): 1. 定义功能类 class MyServer(socketserver.BaseRequestHandler): def handler(self): pass 2. server = socketserver.threadingTCPServer(("127.0.0.1",8800),MyServer) 3. server.server_forerver() """ class MyServer(socketserver.BaseRequestHandler): # 必须要继承 socketserver.BaseRequestHandler 这个类 def handler(self): # 必须要有 handler() 这个方法 """ handler() 方法里面要放并发的业务逻辑 该方法下的 self.request 也是固定写法,是一个套接字对象,即相当于 以前 socket 时的 conn """ # 写自己的业务逻辑 pass # 通过 socketserver 引一个要 并发的类 server = socketserver.ThreadingTCPServer(("127.0.0.1",8800),MyServer) # 第一个参数:IP和端口,第二个参数:要实例化的 功能类;threadingTCPServer 这个类是通过 多线程 帮我们实现的并发;用的是 TCP 协议 # server = socketserver.ForkingTCPServer(("127.0.0.1",8800),MyServer) # 多进程 TCP 通信 server.server_forerver()