WebSocket Data Frame Format
FIN : 현재 패킷이 마지막 조각임을 나타냅니다.
RSV1 ~ 3 : 특별히 지정되지 않은 경우 기본적으로 항상 0이어야 합니다. 0이 아닌 값을 지정할 경우 에러를 발생합니다. (발생시켜야 합니다.)
OPCODE : 패킷의 타입입니다.
MASK : PayloadData가 마스킹되었는지 여부를 나타냅니다. 클라이언트가 서버로 보내는 패킷은 항상 1이어야 합니다. 서버가 클라이언트로 보내는 패킷은 항상 0이어야 합니다.
PAYLOAD_LEN : PayloadData의 길이입니다. 이 값이 125이하일경우 이 필드 자체가 PayloadData의 실제 길이를 나타내며 126/127일 경우 뒤따라올 EXTENDED_PAYLOAD_LEN의 길이를 나타내는 플래그 역할을 합니다.
EXTENDED_PAYLOAD_LEN : PAYLOAD_LEN이 126 또는 127일 때에만 존재합니다. 126일 경우 2바이트 (unsigned short) 값이고 / 127일 경우 8바이트 (long long) 값입니다.
MASKING_KEY : 이 필드는 MASK가 1일때만 존재합니다. PayloadData를 언마스킹 할 때 사용할 키입니다.
PAYLOAD_DATA : 실제 데이터입니다. (UTF-8인코딩된 문자열 또는 바이너리)
주의
PAYLOAD_DATA 필드의 사이즈가 가변인건 당연하지만
EXTENDED_PAYLOAD_LEN 필드와 MASKING_KEY의 사이즈도 가변적인것에 주의해야 합니다.
* EXTENDED_PAYLOAD_LEN : 0바이트일수도 또는 2바이트 / 혹은 8바이트일 수 있습니다.
* MASKING_KEY : 0바이트일수도 / 4바이트일수도 있습니다.
예시
* 클라이언트가 서버에게 100바이트 문자열을 보낼 경우
PAYLOAD_LEN : 보내려는 사이즈가 125이하이므로 100을 그대로 담습니다.
EXTENDED_PAYLOAD_LEN : 이 필드는 존재하지 않습니다.
MASK : 클라이언트가 보내는 패킷은 항상 마스킹되어야 합니다.
MASKING_KEY : MASK 값이 1이므로 이 필드는 존재합니다. 클라이언트는 이 키로 PAYLOAD_DATA를 마스킹해야 합니다.
PAYLOAD_DATA : 100바이트의 UTF-8 인코딩된 문자열을 전송합니다.
패킷의 사이즈는
고정 2바이트(FIN/RSV/OPCODE/MASK/PAYLOAD_LEN)
MASKING_KEY 4바이트
PAYLOAD_DATA 100바이트
총 106바이트입니다.
* 서버가 클라이언트에게 100바이트 문자열을 보낼 경우
PAYLOAD_LEN : 보내려는 사이즈가 125이하이므로 100을 그대로 담습니다.
EXTENDED_PAYLOAD_LEN : 이 필드는 존재하지 않습니다.
MASK : 서버가 보내는 패킷은 항상 마스킹되면 안됩니다.
MASKING_KEY : MASK 값이 0이므로 이 필드는 존재하지 않아야 합니다. PAYLOAD_DATA는 마스킹되지 않은 채 보내집니다.
PAYLOAD_DATA : 100바이트의 UTF-8 인코딩된 문자열을 전송합니다.
패킷의 사이즈는
고정 2바이트(FIN/RSV/OPCODE/MASK/PAYLOAD_LEN)
PAYLOAD_DATA 100바이트
총 102바이트입니다.
* 클라이언트가 서버에게 200바이트 문자열을 보낼 경우
PAYLOAD_LEN : 보내려는 사이즈가 125보다 크고 unsigned short 범위 이내이므로 126으로 설정합니다.
EXTENDED_PAYLOAD_LEN : 이 필드는 2바이트의 길이를 가지게 됩니다. 값은 200을 적습니다.
이하생략
'기타' 카테고리의 다른 글
[C++] ToString() 사용하기 (0) | 2016.08.12 |
---|---|
[VSCode] 확장 프로그램 작성하기 (0) | 2016.07.11 |
C++의 Nested Namespace (0) | 2016.04.08 |
[cocos2d-x] Vibration(진동) 기능 사용하기 (0) | 2016.02.22 |
[Lumberyard] What is Cloud Canvas? (0) | 2016.02.11 |