2012-03-20 3 views
1

Просматривая demos, TornadoGists и other gist snippets (на основе this previous question), я не нашел никакого кода, эквивалентного SimpleHTTPServer из стандартной библиотеки в Python. Я ищу действительно небольшой веб-сервер, который может обрабатывать параллельные запросы, со всем шаблоном, который SimpleHTTPServer включает в себя для обслуживания файлов из каталога запуска.Есть ли эквивалент Tornado SimpleHTTPServer?

ответ

2

ОБНОВЛЕНИЕ: от 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

+0

Ах, не понял, что 'SimpleHTTPServer' не параллелен, но, конечно, это имеет смысл. Если у вас есть настройка Nginx, придерживайтесь ее; Это будет быстрее и надежнее. –

+0

Да, в основном я хотел кое-что, что было низким профилем и было легко настроить. Не работая с Nginx раньше, я не понимал, насколько мал он был сопоставлен с Apache. – technomalogical

Смежные вопросы