2012-03-20 52 views

回答

2

UPDATE:自Tornado 3起,使用內置的StaticFileHandler

Tornado並非真正爲靜態文件提供服務。如果這會看到任何負載,你應該使用nginx,或類似的東西。如果不行,可能會更容易使用SimpleHTTPServer

這就是說,它是微不足道的寫一個:

import os.path 
import mimetypes 

import tornado.httpserver 
import tornado.ioloop 
import tornado.options 
import tornado.web 

class FileHandler(tornado.web.RequestHandler): 
    def get(self, path): 
     if not path: 
      path = 'index.html' 

     if not os.path.exists(path): 
      raise tornado.web.HTTPError(404) 

     mime_type = mimetypes.guess_type(path) 
     self.set_header("Content-Type", mime_type[0] or 'text/plain') 

     outfile = open(path) 
     for line in outfile: 
      self.write(line) 
     self.finish() 

def main(): 
    tornado.options.enable_pretty_logging() 
    application = tornado.web.Application([ 
     (r"/(.*)", FileHandler), 
    ]) 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == "__main__": 
    main() 

這只是讓你開始;如果你打算使用它,你應該確保你不能走上文件系統並訪問任何文件。此外,腳本目前服務於自己,這有點奇怪。

+0

正如我在問題中提到的,我正在尋找同時處理多個請求。 「SimnpleHTTPServer」不處理這個問題,至少不是開箱即用的。今晚我會嘗試你的例子,但是我從此嘗試過Nginx,它似乎滿足了我的需求。 – technomalogical 2012-03-27 18:45:30

+0

啊,沒有意識到'SimpleHTTPServer'不是併發的,但當然,這是有道理的。如果你有Nginx設置,請堅持下去;它會更快,更健壯。 – 2012-03-27 23:31:18

+0

是的,我主要是想要一些低調且易於設置的東西。之前沒有與Nginx合作過,我沒有意識到它與Apache相比有多小。 – technomalogical 2012-04-10 13:44:05