在socket中,如果直接創建的話,是隻能接受一個用戶的請求
需要實現socketserver中的handle方法,可以實現多進程併發訪問
SocketServer內部使用 IO多路複用 以及 “多線程” 和 “多進程” ,從而實現併發處理多個客戶端請求的Socket服務端。即:每個客戶端請求連接到服務器時,Socket服務端都會在服務器是創建一個“線程”或者“進 程” 專門負責處理當前客戶端的所有請求。
1、創建一個繼承自 socketserver.BaseRequestHandler 的類,類中必須定義一個名稱爲 handle 的方法
2、啓動ThreadingTCPServer
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
conn.sendall("我是一個多線程".encode())
Flag = True
while Flag:
data = conn.recv(1024)
if data.decode() == "exit":
Flag = False
conn.sendall(data)
if __name__ == "__main__":
server = socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyServer)
server.serve_forever()
客戶端直接使用原來的客戶端代碼即可。
ThreadingTCPServer
ThreadingTCPServer實現的Soket服務器內部會爲每個client創建一個 “線程”,該線程用來和客戶端進行交互。