2010-03-14 2 views
2

필자는 한때 PHP에서 Comet을 구현하려고 시도했습니다. 곧, 나는 각 HTTP 요청이 하나의 프로세스/스레드를 차지할 것이기 때문에 PHP가 Comet에 적합하지 않음을 발견했다. 결과적으로 잘 확장되지 않습니다.Python에서 Comet 서버 측을 구현하는 방법은 무엇입니까?

저는 XAMPP에 mod_python을 설치했습니다. 필자는 Python 비동기 프로그래밍으로 Comet을 구현하는 것이 쉬울 것이라고 생각했다. 그러나 여전히 그것을 구현하는 방법에 대한 단서를 얻을 수 없습니다.

mod_python에서 Comet을 구현하는 방법이 있습니까?

+0

"아파치는 혜성에 적합하지 않고"PHP가 혜성에 적합하지 않습니다 "라고 말하는 것 같아요. – algorithmicCoder

답변

8

우선, 저는 비동기 전문가가 아닙니다. 주제를 한 번 조사했습니다. IMHO 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() 

- 지금까지의 내가이 아파치에서 가능하지 알고 -하는 가져 오기에 물론 블록의가 완료 될 때까지 요청 처리기의 일반적인 부분입니다 - 그래서 끝나는 것은 고정 된 스레드 또는 프로세스입니다.

파이썬에서 논 블로킹 서비스를 수행하는 또 다른 유명한 라이브러리는 Twisted입니다. 그러나 그것에 대해 많이 알지는 못하며 단지 하나의 스레드/프로세스로 많은 연결을 처리하는 데 도움을 줄 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 확인하고 싶습니다. 아파치가 각 HTTP 요청마다 하나의 스레드/프로세스를 고수한다는 것이 사실입니까? –

+0

네, 제가 아는 한 (오래 mod_wsgi + Django를 오랫동안 사용하는 사용자) 그것이 맞습니다. –

0

this question을 찾았는지 확실하지 않지만 질문하는 내용이 매우 유사하며 좋은 대답이있는 것 같습니다. HTH.

관련 문제