2014-09-01 24 views

回答

7

簡短回答:wsgiref.simple_server是一個超過BaseHTTPServer的WSGI適配器。

較長的答案:

BaseHTTPServer(和SocketServer,在其上構建)是實現最實際的HTTP服務器的模塊。它可以接受請求並返回響應,但它必須知道如何處理這些請求。當你使用直接BaseHTTPServer,則通過子類BaseHTTPRequestHandler,例如提供處理程序:

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler 

class MyHandler(BaseHTTPRequestHandler): 

    def do_GET(self): 
     self.send_response(200) 
     self.send_header('Content-Type', 'text/plain') 
     self.end_headers() 
     self.wfile.write('Hello world!\n') 

HTTPServer(('', 8000), MyHandler).serve_forever() 

wsgiref.simple_server適應此BaseHTTPServer接口向WSGI規範,這是獨立於服務器的Python網絡應用程序的標準。在WSGI,你提供的函數的形式的處理程序,例如:

from wsgiref.simple_server import make_server 

def my_app(environ, start_response): 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    yield 'Hello world!\n' 

make_server('', 8000, my_app).serve_forever() 

make_server函數返回的WSGIServer一個實例,它繼承大多數從BaseHTTPServer.HTTPServerSocketServer.TCPServer的實際協議/網絡邏輯的(儘管它最終會重新實現一些簡單的HTTP規則)。主要不同之處在於您將應用程序代碼與該邏輯集成的方式。

這真的取決於你試圖解決的問題,但對編碼是wsgiref可能是一個更好的主意,因爲它會很容易讓你移動到不同的生產級的HTTP服務器,如uWSGIGunicorn,未來。

相關問題