Python學習筆記15(socketservre)

來源:互聯網
上載者:User

標籤:名稱   mixin   定義   連接埠   code   request   pre   form   connect   

利用socket模組建立socket通訊服務,但發現利用socket模組建立的服務無法進行多線程的處理,當需要進行大量請求處理時,請求就會阻塞在隊列中,甚至發生請求丟棄。並且如果我們需要大量的socket時,就需要重複建立許多socket、綁定連接埠..... ,對於程式員來說意味著重複書寫大量無意義代碼。

那有沒有一種方式既能簡化書寫流程又能實現多線程開發呢 ? 答案是肯定的,這就是SocketServer模組。

SocketServer簡化了網路伺服器的編寫。在進行socket建立時,使用SocketServer會大大減少建立的步驟,並且SocketServer使用了select它有4個類:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。這4個類是同步進行處理的,另外通過ForkingMixIn和ThreadingMixIn類來支援非同步。

該模組在python3中已經更名為socketserver。

使用ThreadingTCPServer:

  • 建立一個繼承自 SocketServer.BaseRequestHandler 的類
  • 類中必須定義一個名稱為 handle 的方法
  • 啟動ThreadingTCPServer

服務端:

import socketserverclass MyTCPHandler(socketserver.BaseRequestHandler):    def handle(self):        while True:            self.data = self.request.recv(1024).strip()            print("{} wrote:".format(self.client_address[0]))            print(self.data)            if not self.data:                print("斷開了")                break            self.request.sendall(self.data.upper())if __name__ == "__main__":    HOST, PORT = "localhost", 9999    server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)    server.serve_forever()

用戶端和socket的一樣:

import socketip_port = (‘127.0.0.1‘,9999)client = socket.socket()client.connect(ip_port)while True:    data = input("用戶端輸入:").strip()    if len(data) == 0:        continue    client.sendall(data.encode("utf-8"))    server_reply = client.recv(1024)    print("用戶端收到:",server_reply.decode())

 

Python學習筆記15(socketservre)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.