python3.6入門到高階(全棧) day29 socketserver實現服務端和多個客戶端通訊
阿新 • • 發佈:2018-11-30
什麼是socketserver?
TCP協議下的socket實現了服務端一次只能和一個客戶端進行通訊, 而socketserver實現了服務端一次能和多個客戶端進行通訊, 底層呼叫的還是socket.
import socketserver class MyServer(socketserver.BaseRequestHandler): # self.request 相當於建立一個通訊通道 conn """ 繼承BaseRequestHandler, 例項化類時要執行 def __init__(self, request, client_address, server): self.request = request self.client_address = client_address self.server = server self.setup() try: self.handle() finally: self.finish()""" def handle(self): # 方法名字必須是 handle, 得和原始碼一樣, 不能變 while 1: print(str(self.request.recv(1024),"utf8")) self.request.send(bytes(input("服務端傳送資訊>>>>>"),"utf8")) if __name__ == "__main__" : ip_port = ("127.0.0.1", 8900) # 例項化一個socket物件,並封裝了IP和埠,以及自己定義的類. 這一步完成了server物件兩個內容: bind IP和埠, listen 排隊的數量server = socketserver.ThreadingTCPServer(ip_port,MyServer) # 呼叫serve_forever方法, 建立通訊通道, 原始碼(request, client_address = self.get_request(), self.get_request方法就是 # server物件 accept() 的過程, ) 在這一步開啟多執行緒應對併發, 並進入處理通訊部分, 例項化 Myserver類, 並執行handle方法(看原始碼) server.serve_forever()