python——網路編程

來源:互聯網
上載者:User

標籤:client   處理   self   執行個體   handler   ges   伺服器端   相關   精簡   

 利用select監聽終端操作執行個體 利用select實現偽同時處理多個Socket用戶端請求:服務端 利用select實現偽同時處理多個Socket用戶端請求:用戶端

此處的Socket服務端相比與原生的Socket,他支援當某一個請求不再發送資料時,伺服器端不會等待而是可以去處理其他請求的資料。但是,如果每個請求的耗時比較長時,select版本的伺服器端也無法完成同時操作。

 基於select實現socket服務端(python2) python3實現

 

SocketServer模組

SocketServer內部使用 IO多工 以及 “多線程” 和 “多進程” ,從而實現並發處理多個用戶端請求的Socket服務端。即:每個用戶端請求串連到伺服器時,Socket服務端都會在伺服器是建立一個“線程”或者“進程” 專門負責處理當前用戶端的所有請求。

ThreadingTCPServer

ThreadingTCPServer實現的Soket伺服器內部會為每個client建立一個 “線程”,該線程用來和用戶端進行互動。

1、ThreadingTCPServer基礎

使用ThreadingTCPServer:

  • 建立一個繼承自 SocketServer.BaseRequestHandler 的類
  • 類中必須定義一個名稱為 handle 的方法
  • 啟動ThreadingTCPServer
 SocketServer實現伺服器 用戶端

2、ThreadingTCPServer源碼剖析

ThreadingTCPServer的類圖關係如下:

 

內部調用流程為:

  • 啟動服務端程式
  • 執行 TCPServer.__init__ 方法,建立服務端Socket對象並綁定 IP 和 連接埠
  • 執行 BaseServer.__init__ 方法,將自訂的繼承自SocketServer.BaseRequestHandler 的類 MyRequestHandle賦值給 self.RequestHandlerClass
  • 執行 BaseServer.server_forever 方法,While 迴圈一直監聽是否有用戶端請求到達 ...
  • 當用戶端串連到達伺服器
  • 執行 ThreadingMixIn.process_request 方法,建立一個 “線程” 用來處理請求
  • 執行 ThreadingMixIn.process_request_thread 方法
  • 執行 BaseServer.finish_request 方法,執行 self.RequestHandlerClass()  即:執行 自訂 MyRequestHandler 的構造方法(自動調用基類BaseRequestHandler的構造方法,在該構造方法中又會調用 MyRequestHandler的handle方法)

ThreadingTCPServer相關源碼:

 BaseServer TCPServer ThreadingMixIn ThreadingTCPServer

RequestHandler相關源碼

 SocketServer.BaseRequestHandler

執行個體:

 服務端 用戶端

源碼精簡:

 View Code

如精簡代碼可以看出,SocketServer的ThreadingTCPServer之所以可以同時處理請求得益於select 和 Threading 兩個東西,其實本質上就是在伺服器端為每一個用戶端建立一個線程,當前線程用來處理對應用戶端的請求,所以,可以支援同時n個用戶端連結(長串連)。

python——網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.