SimpleHTTPServer 的程式設計 API
當我們執行 python -m SimpleHTTPServer 9000
時會發生什麼?
要回答這個問題,我們應該瞭解 SimpleHTTPServer( https://hg.python.org/cpython/file/2.7/Lib/SimpleHTTPServer.py) 和 BaseHTTPServer( https://hg.python.org/cpython/file ) 的結構。 /2.7/Lib/BaseHTTPServer.py) 。
首先,Python 使用 9000
作為引數呼叫 SimpleHTTPServer
模組。現在觀察 SimpleHTTPServer 程式碼,
def test(HandlerClass = SimpleHTTPRequestHandler,
ServerClass = BaseHTTPServer.HTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)
if __name__ == '__main__':
test()
在請求處理程式和 ServerClass 之後呼叫測試函式。現在呼叫 BaseHTTPServer.test
def test(HandlerClass = BaseHTTPRequestHandler,
ServerClass = HTTPServer, protocol="HTTP/1.0"):
"""Test the HTTP request handler class.
This runs an HTTP server on port 8000 (or the first command line
argument).
"""
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
server_address = ('', port)
HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
因此,這裡將使用者作為引數傳遞的埠號解析並繫結到主機地址。執行具有給定埠和協議的套接字程式設計的進一步基本步驟。最後啟動套接字伺服器。
這是從 SocketServer 類繼承到其他類的基本概述:
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+
連結 https://hg.python.org/cpython/file/2.7/Lib/BaseHTTPServer.py 和 https://hg.python.org/cpython/file/2.7/Lib/SocketServer.py 對於進一步查詢非常有用資訊。