롱폴링, 웹소켓, 서버 전송 이벤트(SSE) 및 코멧이란 무엇인가요?

몇 가지 기사를 읽어보았지만 아직 개념이 명확하지 않습니다.

누군가 이러한 기술이 무엇인지 설명해 주실 수 있나요?

  1. 롱 폴링
  2. 서버 전송 이벤트
  3. 웹 소켓
  4. Comet

매번 궁금했던 점은 서버가 연결을 열어두고 클라이언트에 데이터를 푸시한다는 것이었습니다. 연결은 어떻게 유지되며 클라이언트는 푸시된 데이터를 어떻게 가져올 수 있을까요? (클라이언트가 데이터를 어떻게 사용하는지, 코드가 도움이 될 수 있을까요?)

이제 실시간 앱에 어떤 것을 사용해야 하나요? 웹소켓(socket.io[node.js 라이브러리] 사용)에 대해 많이 들었는데 PHP는 왜 안 되나요?

질문에 대한 의견 (2)
해결책

*아래 예시에서 클라이언트는 브라우저이고 서버는 웹사이트를 호스팅하는 웹서버입니다.

이러한 기술을 이해하려면 먼저 고전적인 HTTP 웹 트래픽을 이해해야 합니다.

일반 HTTP:

  1. 클라이언트가 서버에 웹페이지를 요청합니다.
  2. 서버가 응답을 계산합니다.
  3. 서버가 응답을 클라이언트에 전송합니다.

아약스 폴링:

  1. 클라이언트가 일반 HTTP를 사용하여 서버에 웹페이지를 요청합니다(위의 HTTP 참조).
  2. 클라이언트는 요청된 웹페이지를 수신하고 해당 페이지에서 일정한 간격(예: 0.5초)으로 서버에 파일을 요청하는 자바스크립트를 실행합니다.
  3. 서버는 일반 HTTP 트래픽과 마찬가지로 각 응답을 계산하여 다시 전송합니다.

아약스 롱 폴링:

  1. 클라이언트가 일반 HTTP를 사용하여 서버에 웹페이지를 요청합니다(위의 HTTP 참조).
  2. 클라이언트는 요청된 웹페이지를 수신하고 해당 페이지에서 서버에 파일을 요청하는 자바스크립트를 실행합니다.
  3. 서버는 요청된 정보에 즉시 응답하지 않고 새로운 정보를 사용할 수 있을 때까지 기다립니다.
  4. 사용 가능한 새 정보가 있으면 서버는 새 정보로 응답합니다.
  5. 클라이언트는 새 정보를 수신하고 즉시 서버에 다른 요청을 전송하여 프로세스를 다시 시작합니다.

HTML5 서버 전송 이벤트(SSE) / 이벤트 소스:

  1. 클라이언트가 일반 HTTP를 사용하여 서버에 웹페이지를 요청합니다(위의 HTTP 참조).
  2. 클라이언트는 요청된 웹페이지를 수신하고 해당 페이지에서 자바스크립트를 실행하여 서버에 대한 연결을 엽니다.
  3. 서버는 새로운 정보가 있을 때 클라이언트에게 이벤트를 전송합니다.
  • 서버에서 클라이언트로의 실시간 트래픽, 대부분 필요한 것은 다음과 같습니다.
  • 이벤트 루프가 있는 서버를 사용해야 합니다.
  • 다른 도메인의 서버와의 연결은 [올바른 CORS 설정이 있는 경우에만] 가능합니다4.
  • 더 자세한 내용을 읽고 싶으시다면 이 문서가 매우 유용합니다: (기사), (기사), (기사), (튜토리얼).

HTML5 웹소켓:

  1. 클라이언트가 일반 http를 사용하여 서버에 웹페이지를 요청합니다(위의 HTTP 참조).
  2. 클라이언트는 요청된 웹페이지를 수신하고 페이지에서 자바스크립트를 실행하여 서버와의 연결을 엽니다.
  3. 이제 서버와 클라이언트는 양쪽에서 새로운 데이터를 사용할 수 있을 때 서로 메시지를 보낼 수 있습니다.
  • 서버에서 클라이언트로 클라이언트에서 서버로 실시간 트래픽 전송
  • 이벤트 루프가 있는 서버를 사용하는 것이 좋습니다.
  • 웹소켓을 사용하면 다른 도메인의 서버와 연결할 수 있습니다.
  • 푸셔]10 또는 기타와 같이 타사에서 호스팅하는 웹소켓 서버를 사용할 수도 있습니다. 이렇게 하면 클라이언트 측만 구현하면 되므로 매우 쉽습니다!
  • 더 자세한 내용을 읽고 싶다면 (기사), (기사) (튜토리얼) 등을 참고하세요.

Comet:

코멧은 실시간 애플리케이션을 구현하기 위해 스트리밍과 롱폴링을 사용하는 HTML5 이전의 기술 모음입니다. 자세한 내용은 위키백과 또는 문서를 참조하세요.


이제 이 중 어떤 것을 실시간 앱에 사용해야 할까요? 코드). 웹 소켓에 대해 많이 들었습니다 (소켓.io [a node.js 라이브러리])에 대해 많이 들었지만 왜 PHP가 아닌가요?

웹소켓과 함께 PHP를 사용할 수 있는 방법은 래칫을 참조하세요.

해설 (21)

Tieme은 훌륭한 답변을 위해 많은 노력을 기울 였지만 OP 질문의 핵심은 각 기술이 어떻게 작동하는지가 아니라 이러한 기술이 PHP와 어떻게 관련되어 있는지에 있다고 생각합니다.

PHP는 명백한 클라이언트 측 HTML, CSS, 자바스크립트 외에 웹 개발에서 가장 많이 사용되는 언어입니다. 하지만 실시간 애플리케이션과 관련하여 PHP에는 두 가지 주요 문제가 있습니다:

  1. PHP는 매우 기본적인 CGI로 시작되었습니다. PHP는 초기 단계부터 매우 발전해 왔지만, 그 발전은 작은 단계로 이루어졌습니다. PHP는 오늘날과 같이 임베딩이 가능하고 유연한 C 라이브러리가 되었을 때 이미 수백만 명의 사용자를 보유하고 있었으며, 이들 대부분은 초기 실행 모델에 의존하고 있었기 때문에 내부적으로 아직 cgi 모델에서 벗어나려는 확실한 시도를 하지 못했습니다. 심지어 명령줄 인터페이스조차도 PHP 라이브러리(리눅스의 경우 libphp5.so, 윈도우의 경우 php5ts.dll 등)를 호출하지만 여전히 GET/POST 요청을 처리하는 cgi인 것처럼 보입니다. 여전히 '페이지'를 빌드한 다음 수명 주기를 종료해야 하는 것처럼 코드를 실행합니다. 그 결과 멀티 스레드 또는 이벤트 기반 프로그래밍(PHP 사용자 공간 내)을 거의 지원하지 않아 현재 실시간 다중 사용자 애플리케이션에는 실용적이지 않습니다.

PHP 사용자 공간에 이벤트 루프(예: libevent)와 스레드(예: pthread)를 제공하는 확장 기능이 있지만 이를 사용하는 애플리케이션은 극히 일부에 불과하다는 점에 유의하세요.

  1. PHP에는 여전히 가비지 컬렉션에 심각한 문제가 있습니다. 이러한 문제는 지속적으로 개선되고 있지만(위에서 설명한 대로 수명 주기를 끝내기 위한 가장 큰 조치일 가능성이 높습니다), 오래 실행되는 PHP 애플리케이션을 만들려는 최선의 시도조차도 정기적으로 다시 시작해야 합니다. 또한 실시간 애플리케이션에는 실용적이지 않습니다.

PHP 7은 이러한 문제를 해결하는 데 큰 도움이 될 것이며, 실시간 애플리케이션을 위한 플랫폼으로서 매우 유망해 보입니다.

해설 (8)

저는 이러한 점에 주목하여 **자바의 관점에서 예제를 수집하고 작성했습니다.

자바 개발자를 위한 HTTP

리버스 에이잭스 - 이전 스타일

서버 측의 비동기 처리

리버스 에이잭스 - 새 스타일

서버 전송 이벤트

같은 주제를 조사하는 모든 자바 개발자를 위해 여기에 넣습니다.

해설 (0)

웹 애플리케이션 (앱) 에 대해서만 node. js 쉽게 사용할 수 있는 실시간 커뮤니케이션. # 39 에 대한 매우 강력한 node. js 는 it& 때 웹 소켓. 따라서 PHP 알림에는 Node.js&quot 통해 "; 개념이 될 것으로 보인다.

이 슬라이드에서는 예: 실시간 채팅 앱을 만들기 및 PHP 및 node. js

해설 (0)