lang/node

socket.io 프로토콜

C/H 2015. 11. 10. 08:30

socket.io-protocol페이지 번역기 수준의 번역문임을 참고하세요.

Protocol version

2015.11.04 현재 프로토콜 리비전은 4

Parser API

Parser#Encoder

engine-io-transportable 기능에서 입출력 패킷을 압호한 객체입니다. 유일한 접근방법은 Encoder#encode를 통합니다.

Encoder#encode(Object:packet, Function:callback)

engine.io 호환 인코딩의 배열로 패킷 객체를 인코딩합니다. 객체가 순수한 JSON 인 경우 배열은 단일 항목, socket.io 인코딩 된 문자열이 포함됩니다. 개체가 이진 데이터를 포함하는 경우 (ArrayBuffer, Buffer, BLOB, 또는 file) 배열의 첫 번째 항목은 이진 데이터가 초기화 패킷에서 참조 된 위치와 패킷 관련 메타 데이터 및 JSON의 문자열이 될 것입니다. 나머지 항목은 후 디코딩 자리를 입력 할 수있는 원시 이진 데이터가 될 것입니다. 콜백 함수는 유일한 인수로 인코딩 된 배열이라고합니다. socket.io-parser 구현에서, engine.io 에 전달되는 콜백은배열의 각 항목을 기록됩니다. 임의의 구현에 대한 기대는 배열의 각 항목을 순차적으로 전달 된다는 것이다.

Parser#Decoder

전체 socket.io 패킷으로 engine.io에서 데이터를 디코딩하는 객체입니다. 디코더를 사용하는 것으로 작업 흐름 (인코딩이 수신되는 순서대로) engine.io에서 인코딩을 수신 할 때 "Decoder#add" 메소드를 호출하고 완전한 디코딩된 패킷을 처리하기 위해 상기 디코더의 'decoded' 이벤트를 수신하는 것이다.

Decoder#add(Object:encoding)

engine.io 에서 하나의 인코딩 된 객체를 디코딩합니다. non-binary 패킷의 경우, 하나의 부호화 인자는 완전한 패킷을 재구성하기 위해 사용된다. 패킷 타입 "BINARY_EVENT"또는 "ACK”이고, 추가적인 콜은 오리지널 패킷의 '이진 데이터'의 각 부분 중 하나를 추가 할 수 있습니다. 최종 이진 데이터 인코딩이 추가로 전달되면, 패킷은 전체 socket.io로 재구성된다. 패킷이 완전히 디코딩된 후, 디코더는 단독 인수로 디코딩 된 패킷과 함께 (Emitter를 통해) "디코딩"이벤트를 방출(emits)한다. 이 이벤트에 대한 리스너는 즉시 이동 패킷을 처리해야합니다.

Decoder#destroy()

디코더 인스턴스의 리소스 할당을 취소합니다. disconnect mid-decoding 에서는 (예로)메모리 누수를 방지하기 위해서 호출 되어야 합니다.

Parser#types

패킷 유형 키 배열

Packet

각 패킷은 (는) (참조 ”Multiplexing")에 속하는 namespace를 나타내는 NSP 키와 vanilla Object유형의 키 다음 중 하나로 표시됩니다.

  • Packet#CONNECT (0)
  • Packet#DISCONNECT (1)
  • Packet#EVENT (2)
  • Packet#ACK (3)
  • Packet#ERROR (4)
  • Packet#BINARY_EVENT (5)
  • Packet#BINARY_ACK (6)

EVENT

  • 데이터 (배열) 인수의 목록, 그 중 첫 번째는 이벤트 이름이다.
    인수 객체와 임의의 크기의 배열을 포함한 JSON 디코딩, 결과 수 필드의 모든 유형을 포함 할 수 있습니다.
  • id 식별자가 존재하는 경우 id (Number), 서버는이 이벤트의 수신의 인정하고자하는 것을 나타낸다.

BINARY_EVENT

  • data (Array) 이벤트 data 참조, 하지만 인수가 non-JSON 임의의 이진 데이터를 포함 할 수 있다.
    인코딩 된 이진 데이터는 하나의 버퍼, ArrayBuffer, BLOB, 또는 파일로 간주됩니다.
    디코딩하면 모든 이진 데이터는 server-side Buffer입니다; 현대의 최신의 클라이언트의 이진 데이터는 ArrayBuffer입니다.
    Binary를 지원하지 않는 오래된 브라우저에서 모든 Binary Data 항목은 다음과 같은 객체로 대체된다: {base64: true, data: }. BINARY_EVENT 또는 ACK 패킷이 초기에 디코딩되는 경우, 이진 데이터의 모든 항목은 추가적으로 Call 되는 Decoder#add에 의해 자리에 채워(?)진다.
    Decode#add 참고
  • id (Number) 이벤트 id를 참조

ACK

  • 데이터 (배열) 이벤트 데이터를 참조..
    이벤트와 같은 문자열이 위의 입력으로 인코딩. .
    ACK 기능이 이진 데이터를 호출하지 않을 때 사용되어야한다.
  • id (Number) 이벤트 id를 참조

BINARY_ACK

  • 데이터 (배열) ACK 데이터를 참조.
    ACK 함수의 인수는 이진 데이터를 포함 할 때 사용;.
    위에 설명 된 BINARY_EVENT 스타일 패킷을 암호화한다.
  • id (Number) 이벤트 id를 참조

ERROR

data (Mixed) error data

Transport

socket.io 프로토콜은 전송의 다양한 통해 전달 될 수있다.
socket.io-client는 브라우저와 Node.JS 위에 engine.io-client를 통해 구현된 프로토콜입니다. 

socket.ioengine.io를 통해 구현된 프로토콜입니다.

Multiplexing

Socket.IO가 다중 지원이 내장되어 있다, 이는 각 패킷은 항상 경로 문자열 (같은 /이)에 의해 식별 주어진 공간에 속한다는 것을 의미한다. 패킷 객체 NSP에 해당 객체가 존재한다.

socket.io 전송에 연결이 설정되면, ‘/namespace’에 연결 시도로 간주됩니다. (예 : 클라이언트는 ‘/namespace’에 CONNECT 패킷을 전송 한 것처럼 서버 동작).

동일한 전송에 따라 다수의 소켓의 멀티플렉싱을 지원하기 위해, 추가적인 CONNECT 패킷은 임의의 namespace URI에 대해 클라이언트에 의해 전송 될 수있다 (예 : /another).

서버는 네임 스페이스에 대응 CONNECT 패킷으로 응답하면 다중 소켓이 연결된 것으로 간주됩니다.

또한, 서버는 다중 소켓 연결 오류를 나타내는 오류 패킷에 응답 할 수 있으며, 인증 오류 등, 관련 오류 payload는, 각 오류에 따라 달라질 수 있으며, 사용자가 정의 할 수 있습니다.

CONNECT 패킷이 주어진 NSP 위해 서버에 의해 수신되면, 클라이언트는 전송 및 이벤트 패킷을 수신 할 수있다. 당사자(클라이언트를 의미하는것 같음) 중 ID 필드와 이벤트 패킷을 수신하면, ACK 패킷은 상기 패킷의 수신을 확인하는 것으로 예상된다.

License

MIT

반응형