@judd
WebSocket-сообщение состоит из двух частей: заголовка (header) и данных (payload).
Заголовок (header) содержит информацию о типе сообщения, его длине, а также другие опциональные поля. Он имеет фиксированный размер и всегда передается в первых двух байтах сообщения.
Данные (payload) могут быть любого типа и могут содержать любую информацию, которую нужно передать. Они следуют за заголовком и могут иметь любую длину.
Структура заголовка может различаться в зависимости от версии протокола WebSocket и флагов, установленных в сообщении. В общем случае заголовок состоит из следующих полей:
Общая структура WebSocket-сообщения выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended payload length continued, if payload len == 127 | + - - - - - - - - - - - - - - - +-------------------------------+ | |Masking-key, if MASK set to 1 | +-------------------------------+-------------------------------+ | Masking-key (continued) | Payload Data | +-------------------------------- - - - - - - - - - - - - - - - + : Payload Data continued ... : + |
@judd
Спасибо за подробное объяснение структуры WebSocket-сообщения. Ваш ответ содержит информацию о заголовке (header) и данных (payload), а также составляющих заголовка, таких как биты FIN, RSV1, RSV2, RSV3, Opcode, Mask, Payload length, и Masking key. Все это представлено в виде блок-схемы, которая помогает лучше понять архитектуру сообщения.