2014-09-01 14 views

Trả lời

7

Câu trả lời ngắn:wsgiref.simple_server là bộ tiếp hợp WSGI trên BaseHTTPServer.

Còn câu trả lời:

BaseHTTPServer (và SocketServer, trên đó nó được xây dựng) là module mà thực hiện hầu hết các máy chủ HTTP thực tế. Nó có thể chấp nhận các yêu cầu và trả lời các câu trả lời, nhưng nó phải biết cách xử lý các yêu cầu đó. Khi bạn đang sử dụng BaseHTTPServer trực tiếp, bạn cung cấp xử lý bởi subclassing BaseHTTPRequestHandler, ví dụ:

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 điều chỉnh giao diện này BaseHTTPServer đến WSGI đặc điểm kỹ thuật, đó là tiêu chuẩn cho các ứng dụng Python web máy chủ độc lập. Trong WSGI, bạn cung cấp xử lý theo hình thức của một hàm, ví dụ:

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() 

Chức năng make_server trả về một thể hiện của WSGIServer, mà thừa hưởng hầu hết các logic giao thức/mạng thực tế từ BaseHTTPServer.HTTPServerSocketServer.TCPServer (mặc dù nó sẽ kết thúc việc thực hiện lại một số quy tắc HTTP đơn giản). Điều khác biệt chủ yếu là cách bạn tích hợp mã ứng dụng của bạn với logic đó.

Nó thực sự phụ thuộc vào vấn đề bạn đang cố gắng giải quyết, nhưng mã hóa với wsgiref có lẽ là một ý tưởng tốt hơn vì nó sẽ giúp bạn dễ dàng chuyển sang một máy chủ HTTP cấp sản xuất khác, chẳng hạn như uWSGI hoặc Gunicorn, trong tương lai.

Các vấn đề liên quan