Как реализовать серверную часть Comet с Python? - PullRequest
2 голосов
/ 14 марта 2010

Я однажды пытался реализовать Comet в PHP. Вскоре я обнаружил, что PHP не подходит для Comet, поскольку каждый HTTP-запрос будет занимать один процесс / поток. В результате, он плохо масштабируется.

Я только что установил mod_python в свой XAMPP. Я думал, что было бы легко реализовать Comet с помощью асинхронного программирования на Python. Но до сих пор не могу понять, как это реализовать.

Есть ли идеи, как реализовать Comet в mod_python?

Ответы [ 2 ]

8 голосов
/ 14 марта 2010

Прежде всего, я вообще не асинхронный эксперт, я только что исследовал тему один раз. ИМХО, если вы используете XAMPP, тогда вы теряете возможность выполнения длинного опроса, потому что Apache использует поток / процессы (в зависимости от конфигурации) для каждого запроса.

Вам нужен неблокирующий веб-сервер, такой как Tornado , который позволяет разбивать запросы на две части, из которых вторая запускается при каком-либо событии, но при этом сервер может принимать последующие входящие запросы .

Пример из Документация Торнадо / лицензия /:

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        http = tornado.httpclient.AsyncHTTPClient()
        http.fetch("http://friendfeed-api.com/v2/feed/bret",
               callback=self.async_callback(self.on_response))

    def on_response(self, response):
        if response.error: raise tornado.web.HTTPError(500)
        json = tornado.escape.json_decode(response.body)
        self.write("Fetched " + str(len(json["entries"])) + " entries "
                   "from the FriendFeed API")
        self.finish()

- насколько я знаю, это невозможно в Apache - в котором выборка является обычной частью обработчика запросов, которая, конечно, блокируется до тех пор, пока не завершится - так что вы заканчиваете замороженным потоком или процессом.

Другая известная библиотека для выполнения неблокирующих сервисов в Python - это Twisted , но я мало что знаю об этом, только то, что она также может помочь вам в обработке большого количества соединений только с один поток / процесс.

0 голосов
/ 14 марта 2010

Я не уверен, что вы сталкивались с этим вопросом , но задаваемый вопрос довольно похож, и, похоже, там есть несколько хороших ответов. НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...