2013-02-03 1 views
1

저는 현재 아파치 서버로 PHP로 작성된 웹 프로젝트에서 작업하는 것을 돕기 위해 "모집"되었습니다. 우리는 실시간 (또는 적어도 그것에 매우 근접한) 채팅 기능을 통합하고자합니다. 확장 성은 확실한 관심사이며 이러한 유형의 작업은 필자의 전형이 아닙니다.확장 가능한 긴 폴링 서버를 PHP와 통합하는 방법은 무엇입니까?

그런 채팅 기능을 만드는 데 대해 읽은 모든 내용은 "긴 폴링"을 사용해야 서버가 급격하게 과부하를 일으키지 않아 충돌이 발생합니다. PHP와 Apache는 이러한 기능을 구현하는 데 도움이되지 않으므로 예를 들어 Twisted Python과 같은 몇 가지 대안을 살펴 보았습니다.

웹 사이트는 약 7,000 줄의 PHP를 가지고 있습니다. (예를 들어, 모든 언어에 대해 언어를 바로 전환하는 것이 어렵습니다.) 제 질문은 어떻게 파이썬과 별도의 서버를 설치 하시겠습니까? 아니면이 작업을 수행하는 것은 매우 나쁜 방법입니까? 더 나은 대안이 있습니까? (안타깝게도 많은 PHP Comet이나 심지어 AJAX의 해결책은 규모가 작지 않습니다. 아파치 서버는 꼭 필요한 것은 아니지만 사용되는 서버는 PHP와 Python 등에서 작동해야합니다. 별도의 서버 보유)

도움을 주셔서 감사합니다!

+0

미안 해요 살짝 넘어,이 유용한 의견되지 않을 수도 있습니다,하지만 확장 성이 무엇을 의미합니까, 예입니다? –

+0

만약 사이트가 동시에 10 명의 사용자 대 1,000 명의 사용자 대 5,000 명의 사용자 등을 가졌다 고 말하면, 아파치는 작업자 스레드를 다 써 버릴 것이고 PHP는 중요한 HTTP 요청이 열려있는 것으로 간주되지 않을 것입니다 음량. – JohnZ

+0

그래서 scallable은 효과가 있다는 것을 의미합니까? –

답변

2

서버에서 토네이도를 사용하여 채팅 응용 프로그램을 작성합니다. 클라이언트 서버 통신은 웹 소켓을 통해 이루어질 수 있습니다. 클라이언트 측에서 SockJS를 사용하면 긴 폴링을 통해 이전 브라우저를 지원할 수도 있습니다. Tornado를 사용하여 작성된 채팅 클라이언트의 예가 많이 있습니다. 시작하는 것은 매우 간단하며 훌륭하게 확장 할 수 있습니다. 이와 같은 채팅 서버는 상당한 CPU 활동을 보이지 않으면 서 수천 명의 고객에게 서비스를 제공 할 수 있습니다.

이 가능성이 설계 https://github.com/diggidanne/websocket-chat/blob/master/server.py

+0

토네이도와 웹 소켓을 실험하기 시작했습니다. 간단하지만 매우 도움이되는 대답입니다. 고맙습니다! – JohnZ

+0

예, 우리는 Tornado를 사용하여 PythonAnywhere에서 콘솔의 출력물을 제공합니다. 우리는 규모 문제가 있었지만 토네이도의 잘못은 없었습니다. 주 스레드에서 차단 작업을 수행하지 않도록하십시오. – aychedee