我曾尝试用PHP实现Comet。很快,我发现PHP不适合Comet,因为每个HTTP请求都会占用一个进程/线程。结果,它不能很好地扩展。
我刚刚在我的XAMPP中安装了mod_python。我认为使用Python异步编程实现Comet会很容易。但仍然无法弄清楚如何实现它。
有没有想过如何在mod_python中实现Comet?
答案 0 :(得分:8)
首先,我根本不是异步专家,我只调查了一次这个话题。 恕我直言,如果您正在使用XAMPP,那么您将失去进行长轮询的可能性,因为Apache为每个请求使用线程/进程(取决于配置)。
您需要的是非阻塞Web服务器,如Tornado,它允许将请求分成两部分,其中第二部分在某些事件上被触发,但同时服务器可以接受后续的入站请求。 / p>
来自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下是不可能的 - 其中fetch是请求处理程序的常规部分,当然它会一直阻塞直到它完成 - 所以你最终得到的是冻结的线程或进程。
另一个在Python中进行非阻塞服务的着名库是Twisted,但我不太了解它,只是它能够帮助你只用一个线程来处理很多连接/处理
答案 1 :(得分:0)
我不确定你是否遇到this question,但问的问题非常相似,那里似乎有一些好的答案。 HTH。