>백엔드 개발 >PHP 튜토리얼 >PHP가 Comet 기반 실시간 메시징을 효과적으로 처리할 수 있습니까?

PHP가 Comet 기반 실시간 메시징을 효과적으로 처리할 수 있습니까?

DDD
DDD원래의
2024-12-31 00:26:16552검색

Can PHP Effectively Handle Comet-Based Real-Time Messaging?

PHP Power Comet 실시간 메시징이 가능합니까?

PHP를 백엔드로 사용하여 실시간 채팅을 구현하는 것을 고려할 수 있습니다. 그러나 일반적인 비판은 이 아이디어에 그림자를 드리웠습니다.

"PHP는 각 브라우저 클라이언트와의 지속적인 연결을 유지해야 하기 때문에 Comet에게는 좋지 않은 선택이라고 합니다. mod_php를 활용하려면 각각에 대해 독점적으로 Apache 하위를 묶어야 합니다. 클라이언트가 솔루션을 확장할 수 없게 만듭니다."

문제

이 문제를 해결하기 위해 근본적인 문제를 살펴보겠습니다.

Apache의 스레드 관리

모든 Apache 요청은 별도의 작업자 스레드를 사용합니다. 완료될 때까지. 지속 시간이 길기로 알려진 Comet 요청은 이러한 스레드를 독점할 수 있습니다.

PHP의 동시 실행 제한

Apache의 스레드 할당이 해결되더라도 PHP의 특성상 고유한 스레드가 필요합니다. 요청에 따라. 결과적으로 FastCGI는 상황을 해결하지 못합니다.

Continuations: Beyond PHP's Reach

이벤트 트리거 시 Comet 요청 재개를 가능하게 하는 Continuations는 본질적으로 PHP에서 지원됩니다.

가능 솔루션

이러한 장애물에도 불구하고 해결 방법은 있습니다.

  • Apache의 이벤트 MPM: Apache의 "이벤트" MPM은 Keep Alive 상태를 다르게 처리하지만 여전히 요청 후까지 스레드 "다시 알림"을 ​​연기합니다.
  • 로드 밸런서 라우팅: 로드 밸런서를 활용하면 Apache 및 Comet 지원 서버(예: Jetty, Tomcat)를 위임하여 단일 포트에서 요청을 처리하는 것이 가능해집니다.

주의사항

이것 솔루션에는 주의사항이 있습니다. MPM은 상당한 개선을 제공하지 못할 수 있으며 로드 밸런싱으로 인해 아키텍처가 더욱 복잡해집니다.

위 내용은 PHP가 Comet 기반 실시간 메시징을 효과적으로 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.