2010-03-14 2 views
2

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

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

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

+0

Я думаю, вы хотите сказать, что «Apache не подходит для кометы», а не «PHP не подходит для кометы» – algorithmicCoder

ответ

8

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

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

Пример из Tornado documentation/license /:

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

Спасибо за ваш ответ. Просто хочу подтвердить. Верно ли, что Apache использует один поток/процесс для каждого HTTP-запроса? –

+0

Да, насколько я знаю (долгое время mod_wsgi + пользователь Django), это правильно. –

0

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

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

  • Нет связанных вопросов^_^