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.pyhttps://hg.python.org/cpython/file/2.7/Lib/SocketServer.py 對於進一步查詢非常有用資訊。