Задать вопрос
@waltaki

WebSocket — в чем разница между байтовой передачей и текстовой?

Я понимаю, что на низком уровне все одинаково, но все же, в чем разница?

Бывает в веб сокете байтовый режим и текстовой, в чем разница?
  • Вопрос задан
  • 145 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
shai_hulud
@shai_hulud
https://tools.ietf.org/html/rfc6455#section-5.6

Data frames carry application-layer and/or extension-layer data. The
opcode determines the interpretation of the data:

Text

The "Payload data" is text data encoded as UTF-8. Note that a
particular text frame might include a partial UTF-8 sequence;
however, the whole message MUST contain valid UTF-8. Invalid
UTF-8 in reassembled messages is handled as described in
Section 8.1.

Binary

The "Payload data" is arbitrary binary data whose interpretation
is solely up to the application layer.


Текстовый фрейм это бинарный фрейм в котором контент это UTF-8 закодированный текст. Это сделано было скорее всего для удоства использования WS из браузера т.к. в JS в то время не было удобного представления бинарный данных.
Ответ написан
Комментировать
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Не совсем понятно, о чём именно Вы говорите и что за "байтовый режим"... Все мои попытки найти ответ на вопрос, о чём хотя бы примерно идёт речь увенчались на данный момент нахождением только этого материала. Подозреваю, что речь идёт о некоем "бинарном" и "текстовом" режимах (хотя, на уровне самих вебсокетов, я чего-то таких режимов не припоминаю, не смотря на то, что когда-то я занимался работой с ними на очень низком уровне). Если так (т.е. речь идёт всё же про "бинарный" и "текстовый" режимы) - судя по всему, разница есть конкретно на уровне JS'а и отличия состоят только в том, как сам JS будет воспринимать полученные им данные, что собственно следует из примера (взято по ссылке выше):

socket.bufferType = "arraybuffer";
socket.onmessage = (event) => {
  // event.data является строкой (если текст) или arraybuffer (если двоичные данные)
};


Как видите, в зависимости от контекста получаемых/передаваемых данных - они могут интерпретироваться в JS по разному, что (как я понимаю) сделано просто для удобства (работы с исходными данными) и никакой другой практической цели в себе не несёт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы