激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python探索之SocketServer詳解

Python探索之SocketServer詳解

2020-12-14 00:19Learn Python Python

這篇文章主要介紹了Python探索之SocketServer詳解,小編覺得還是比較不錯的,這里分享給大家,供需要的朋友參考。

SocketServer,網絡通信服務器,是Python標準庫中的一個模塊,其作用是創建網絡服務器。SocketServer模塊定義了一些類來處理諸如TCP、UDP、UNIX流和UNIX數據報之上的同步網絡請求。

SocketServer模塊處理網絡請求的功能,可以通過兩個主要的類來實現:一個是服務器類,一個是請求處理類。
服務器類 處理通信問題,如監聽一個套接字并接收連接等;

請求處理類 處理“協議”問題,如解釋到來的數據、處理數據并把數據發回給客戶端等。

這種實現將服務器的實現過程和請求處理的實現過程解耦,這意味著我們可以將不同的服務器實現和請求處理實現結合起來來處理一些定制的協議,例如一個TCP服務器類和一個流請求處理類結合,處理基于TCP的網絡請求。同時,也可以基于SocketServer模塊中的服務器類和請求處理類,實現網絡層之上應用層的服務器和請求處理實現,例如基于TCP服務器類實現HTTP服務器,基于流處理請求類實現HTTP請求處理類等。

服務器類

SocketServer模塊中定義了五種服務器類。
BaseServer(服務器的基類,定義了API)
TCPServer(使用TCP/IP套接字)
UDPServer(使用數據報套接字)
UnixStreamServer(使用UNIX域套接字,只適用UNIX平臺)
UnixDatagramServer(使用UNIX域套接字,只適用UNIX平臺)

1. 構造服務器對象

要構建一個服務器對象,需要向它傳遞一個地址server_address(服務器將在這個地址上監聽請求),以及一個請求處理類RequestHandlerClass(不是請求處理實例)。服務器類基類的構造函數如下:

?
1
2
3
4
5
6
7
class BaseServer:
 def __init__(self, server_address, RequestHandlerClass):
  """Constructor. May be extended, do not override."""
  self.server_address = server_address
  self.RequestHandlerClass = RequestHandlerClass
  self.__is_shut_down = threading.Event()
  self.__shutdown_request = False
 

后,可以構造TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer。其中,TCPServer繼承自BaseServer,UDPServer和UnixStreamServer繼承自TCPServer,UnixDatagramServer繼承自UDPServer。各個服務器類型可以根據自己的特點對基類進行擴展,例如創建監聽套接字、綁定監聽地址和端口、進行監聽等。一旦實例化服務器對象,便可以使用服務器的方法來監聽和處理請求。

2. 實現服務器

由于SocketServer模塊中定義的五種服務器類中,除了基類BaseServer和TCPServer外,其余的三個類都是直接或間接地繼承自TCPServer。因此,以下以TCPServer的實現過程為例進行說明。

構造TCPServer。 構造TCPServer時,構造函數創建了一個套接字(這個套接字可以通過更改地址簇和類型用于其他服務器)用于監聽請求。并且調用server_bind()綁定監聽的地址和端口,調用server_activate()開始監聽。

啟動服務器。 服務器實例化后,可以使用serve_forever()或者handle_request()來監聽和處理請求,實現服務器功能。這兩個方法的具體實現依賴于_handle_request_noblock()方法。這個方法是BaseServer類中定義的。具體實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def _handle_request_noblock(self):
 """Handle one request, without blocking.
 I assume that select.select has returned that the socket is
 readable before this function was called, so there should be
 no risk of blocking in get_request().
 """
 try:
  request, client_address = self.get_request()
 except socket.error:
  return
 if self.verify_request(request, client_address):
  try:
   self.process_request(request, client_address)
  except:
   self.handle_error(request, client_address)
   self.shutdown_request(request)
 else:
  self.shutdown_request(request)

處理請求。 根據上一步驟啟動服務器后,服務器便開始監聽請求。如果接收到請求信息,便開始處理請求。由_handle_request_noblock()可以看出有幾個函數比較重要。

get_request() ——這個函數可以在子類中重寫。在TCPServer中,該函數調用監聽套接字的accept()方法,返回請求request和客戶端地址client_address。

verify_request(request, client_address) ——這個函數可以在子類中重寫。該函數返回True表示處理請求,返回False表示忽略請求。

process_request(request, client_address) ——這個函數可以在子類中重寫。該函數將調用finish_request()具體完成請求的處理過程,并且在處理完請求后關閉請求。

finish_request(request, client_address) ——該函數將構造一個請求處理類的實例。請求處理類被實例化后將調用其handle()方法處理請求。

3. 進程/線程支持

SocketServer模塊中還提供了一些”mix-in”類:ForkingMixIn和ThreadingMixIn。這些類可以和服務器類混合使用,很容易改變服務器,為每個請求使用一個單獨的進程或線程。具體的服務器類有:

class ForkingUDPServer(ForkingMixIn, UDPServer)
class ForkingTCPServer(ForkingMixIn, TCPServer)
class ThreadingUDPServer(ThreadingMixIn, UDPServer)
class ThreadingTCPServer(ThreadingMixIn, TCPServer)
class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer)
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer)

請求處理類

要接收到來的請求以及確定采取什么行動,其中大部分的工作都是由請求處理類完成的。請求處理類負責在套接字層之上實現協議。具體過程為:讀取請求、處理請求、寫回響應。請求處理類基類中定義了3個方法,子類中需要重寫。

setup() ——為請求準備請求處理器
handle() ——對請求完成具體的工作。諸如解析到來的請求,處理數據,并發回響應等。
finish() ——清理setup()期間創建的所有數據

總結

以上就是本文關于Python探索之SocketServer詳解的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://python.jobbole.com/88626/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区三区在线 | 免费一级特黄毛片视频 | 成人在线免费小视频 | 中文字幕在线网站 | 国产精品美女一区二区 | 九九热视频免费在线观看 | 亚洲第五色综合网 | 爱看久久 | 日日操夜 | 成品片a免费直接观看 | 久国久产久精永久网页 | 99久久久国产精品免费观看 | 久久久免费电影 | 毛片a片| 国产精品久久久久国产精品三级 | 视频一区 日韩 | 欧美乱淫| 久久久婷婷 | av电影在线网| 国产成人观看 | www国产成人免费观看视频 | 亚洲第一成人久久网站 | 国产精品久久久久久久久久10秀 | www.99re1.com | 激情欧美在线 | 国产视频导航 | 国产精品久久国产精麻豆96堂 | 久久福利国产 | 黄污网站在线观看 | 99re色| 亚洲一级电影在线观看 | av成人免费 | 毛片大全在线观看 | 成人福利免费在线观看 | 日韩av电影在线免费观看 | 国产91久久精品 | 一区免费 | 国产精品一区二区手机在线观看 | 成人毛片视频在线播放 | www.91成人 | 黄色大片www|