Python HTTP-сервер, который поддерживает чанкованное кодирование? - PullRequest
6 голосов
/ 09 апреля 2009

Я ищу хорошо поддерживаемый многопоточный HTTP-сервер Python, который поддерживает фрагментированные ответы кодирования. (Т.е. "Transfer-Encoding: chunked" в ответах). Какая база HTTP-серверов лучше всего подходит для этой цели?

Ответы [ 4 ]

5 голосов
/ 09 апреля 2009

Twisted поддерживает кодирование передачи по частям (ссылка API) (см. Также документ API для HTTPChannel ). Существует ряд проектов промышленного уровня, использующих Twisted (например, Apple использует его для сервера iCalendar в Mac OS X Server), поэтому он довольно хорошо поддерживается и очень надежен.

2 голосов
/ 17 февраля 2012

Twisted поддерживает частичную передачу и делает это прозрачно. то есть, если ваш обработчик запроса не указывает длину ответа, twisted автоматически переключится на чанк-передачу и сгенерирует один чанк на вызов Request.write.

0 голосов
/ 18 ноября 2016

Мне удалось сделать это, используя Торнадо :

#!/usr/bin/env python

import logging

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

from tornado.options import define, options

define("port", default=8080, help="run on the given port", type=int)

@tornado.web.stream_request_body
class MainHandler(tornado.web.RequestHandler):
    def post(self):
        print()
    def data_received(self, chunk):
        self.write(chunk)

        logging.info(chunk)

def main():
    tornado.options.parse_command_line()

    application = tornado.web.Application([
        (r"/", MainHandler),
    ])

    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)

    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    main()
0 голосов
/ 09 апреля 2009

Я почти уверен, что WSGI-совместимые серверы должны поддерживать это. По сути, приложения WSGI возвращают повторяемые фрагменты, которые возвращает веб-сервер. У меня нет личного опыта с этим, но вот список совместимых серверов .

Я должен подумать, что было бы довольно легко свернуть свой собственный, хотя, если серверы WSGI не соответствуют тому, что вы ищете, используя встроенный в Python CGIHTTPServer . Он уже многопоточный, так что вам нужно просто разделить ответы на части.

...