簡體   English   中英

如何使用Python實現Comet服務器端?

[英]How to implement Comet server side with Python?

我曾經嘗試用PHP實現Comet。 很快,我發現PHP不適合Comet,因為每個HTTP請求都會占用一個進程/線程。 結果,它不能很好地擴展。

我剛剛在我的XAMPP中安裝了mod_python。 我認為使用Python異步編程實現Comet會很容易。 但仍然無法弄清楚如何實現它。

有沒有想過如何在mod_python中實現Comet?

首先,我根本不是異步專家,我只是調查過一次這個話題。 恕我直言,如果您正在使用XAMPP,那么您將失去進行長輪詢的可能性,因為Apache為每個請求使用線程/進程(取決於配置)。

您需要的是非阻塞Web服務器,如Tornado ,它允許將請求分成兩部分,其中第二部分在某些事件上被觸發,但同時服務器可以接受后續入站請求。

來自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下是不可能的 - 其中fetch是請求處理程序的常規部分,當然它會一直阻塞直到它完成 - 所以你最終得到的是凍結的線程或進程。

另一個用於在Python中進行非阻塞服務的着名庫是Twisted ,但我對它知之甚少,只是它能夠幫助您只使用一個線程/進程處理大量連接。

我不確定你是否遇到過這個問題 ,但問的問題非常相似,那里似乎有一些好的答案。 HTH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM