Programing

socket.io는 어떻게 작동합니까?

crosscheck 2020. 11. 21. 15:41
반응형

socket.io는 어떻게 작동합니까?


나는 socket.io를 사용하고 있으며 설정이 빠르지 만 (사용 페이지의 예제 덕분에) 정확히 어떤 일이 일어나고 있는지 그리고 그것을 작동시키는 기술에 대해 더 알고 싶습니다.

socket.io의 정확한 메커니즘은 무엇입니까?

포트 80에 있습니까 아니면 별도의 포트입니까?

실제로 열려 있습니까? 아니면 그 부분이 시뮬레이션됩니까?

각 소켓 이벤트를 프로파일 링하는 방법이 있습니까? (피들러를 사용하여 ajax 호출에서 어떤 일이 발생하는지 확인하는 것과 같습니다)


디버깅을 위해 Theseus 를 사용해 볼 수 있습니다 .

다음은 socket.io SPEC에 대한 간략한 개요입니다 .

Socket.IO는 WebSocket과 유사한 API를 많은 브라우저와 장치에 제공하는 것을 목표로하며, 실제 실시간 응용 프로그램과 게임을 만드는 데 도움이되는 몇 가지 특정 기능을 제공합니다.

  • 다중 전송 지원 (이전 사용자 에이전트, 모바일 브라우저 등).
  • 동일한 연결 (네임 스페이스)에있는 여러 소켓.
  • 하트 비트를 통한 연결 끊김 감지.
  • 선택적 승인.
  • 버퍼링을 통한 재 연결 지원 (모바일 장치 또는 불량 네트워크에 이상적)
  • HTTP 위에있는 경량 프로토콜입니다.

Socket.IO 소켓의 구조

Socket.IO 클라이언트는 먼저 연결에 사용할 전송을 결정합니다.

Socket.IO 소켓의 상태는 , disconnected수 있습니다 .disconnectingconnectedconnecting

전송 연결이 될 수있다 closed, closing, open,와 opening.

간단한 HTTP 핸드 셰이크는 Socket.IO 연결의 시작 부분에서 발생합니다. 핸드 셰이크가 성공하면 클라이언트가 다음을 수신하게됩니다.

  • 연결을 열기 위해 전송에 제공 될 세션 ID입니다.
  • 하트 비트가 예상되는 시간 (초 heartbeat timeout)
  • 전송 연결이 다시 열리지 않은 경우 소켓이 연결 해제 된 것으로 간주 될 때 전송 연결이 닫힌 후 몇 초 ( close timeout).

이 시점에서 소켓은 연결된 것으로 간주되고 전송은 연결을 열도록 신호를받습니다.

전송 연결이 닫히면 양쪽 끝은 메시지를 버퍼링 한 다음 연결이 다시 시작될 때 일괄 처리로 전송되도록 적절하게 프레임을 지정합니다.

협상 된 시간 초과 내에 연결이 재개되지 않으면 소켓이 연결 해제 된 것으로 간주됩니다. 이 시점에서 클라이언트는 새 핸드 셰이크를 의미하는 소켓을 다시 연결하기로 결정할 수 있습니다.

더 많은 세부 정보가 필요한 경우 여기 에서 나머지 사양을 읽을 수 있습니다.


JAM의 게시물은 socket.io 무엇인지 요약하는 데 효과적 입니다 . 다른 질문에 대해 구체적으로 말씀 드리고자합니다.

  • Socket.io는의 인스턴스에 연결 http.Server하고 여기에 핸들러를 추가합니다. 자체적으로 네트워크 포트를 수신하지 않습니다. 단순히 기존 HTTP 서버에 socket.io 특정 핸들러를 추가합니다. (단, io.listen()번호로 전화를 걸면 내부적으로 지정된 포트를 수신하여 연결하는 새로운 HTTP 서버를 생성합니다.)

  • WebSockets 전송을 사용하는 경우 실제로 열려 있습니다. 또한 전통적인 (긴) 폴링 아약스 요청을 사용하는 대체 메커니즘도 포함됩니다. 따라서 대답은 브라우저가 지원하는 API에 따라 다릅니다. (있는 경우 사용할 대체 항목을 선택적으로 구성 할 수 있습니다.)

  • Fiddler는 이제 Chrome의 개발자 도구와 마찬가지로 웹 소켓을 지원합니다.

여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/16719282/how-does-socket-io-work

반응형