我曾经尝试用PHP实现Comet.很快,我发现PHP不适合Comet,因为每个HTTP请求都会占用一个进程/线程.结果,它不能很好地扩展.
我刚刚在我的XAMPP中安装了mod_python.我认为使用Python异步编程实现Comet会很容易.但仍然无法弄清楚如何实现它.
有没有想过如何在mod_python中实现Comet?
首先,我根本不是异步专家,我只是调查过一次这个话题.恕我直言,如果您正在使用XAMPP,那么您将失去进行长轮询的可能性,因为Apache为每个请求使用线程/进程(取决于配置).
您需要的是非阻塞Web服务器,如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()
Run Code Online (Sandbox Code Playgroud)
- 据我所知,这在Apache下是不可能的 - 其中fetch是请求处理程序的常规部分,当然它会一直阻塞直到它完成 - 所以你最终得到的是冻结的线程或进程.
另一个用于在Python中进行非阻塞服务的着名库是Twisted,但我不太了解它,只是它能够帮助你只用一个线程/进程来处理很多连接.
| 归档时间: |
|
| 查看次数: |
4322 次 |
| 最近记录: |