Websocket на основе фреймов

Я прочитал из здесь, что Websocket - это протокол на основе кадров, а не на основе потоков. Но в нем также указано Почему WebSockets основаны на фреймах, а не на потоках? Я не знаю и, как и вы, мне бы хотелось узнать больше, поэтому, если у вас есть идея, не стесняйтесь добавлять комментарии и ресурсы в ответы ниже.
Может ли кто-нибудь объяснить, в чем преимущество использования протокола на основе фреймов в Websocket?

0
0
295
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, уже существующий ответ это поможет предоставить некоторую ссылку для обсуждения.

Использование фреймов и протокол на основе массажа (по сравнению с протоколом на основе потоков) упрощает написание веб-ориентированных приложений.

Общие действия, такие как отправка данных JSON, становятся проще и не требуют, чтобы каждое приложение реализовывало уровень буферизации / кэширования сетевых данных для фрагментированных сообщений.


РЕДАКТИРОВАТЬ (отвечая на комментарий)

Уровень TCP / IP гарантирует доставку и упорядочение сетевых пакетов, но не имеет понятия о длине данных - это протокол потоковой передачи, и он обещает, что поток прибудет по порядку, не более того.

Если какие-либо данные поступают не по порядку, тогда уровень протокола TCP / IP изменит порядок данных. Для этого может потребоваться внутренний кеш / буфер, который будет хранить существующие данные в ожидании недостающих данных.

Напротив, WebSocket основан на сообщениях и учитывает длину данных сообщения.

Фреймы WebSocket используют заголовок с длиной данных (общая / частичная), чтобы позволить уровню протокола WebSocket объединять все данные как единое целое, даже если они распределяются по нескольким пакетам TCP / IP или (даже) фреймам WebSocket.

Это требует, чтобы уровень протокола сохранял данные во внутреннем буфере до тех пор, пока не будут получены все ожидаемые данные в сообщении. Протокол WebSocket будет пересылать сообщение в приложение только тогда, когда будут получены все его данные.

Это «удержание данных» для извлечения «единиц» сообщения из потока является элементом кэширования / буферизации, о котором я говорил.

Спасибо за ответ. Я прочитал ваш ответ в другом посте. Итак, вы упомянули, что в потоковом протоколе мы не знаем конца сообщения. (Я прав?) Но разве не уровень TCP / IP переупорядочивает поток? Кроме того, не могли бы вы подробнее рассказать о слое кэширования сетевых данных? На каком уровне это должно быть реализовано?

HKIT 26.10.2018 08:20

@WorkingSlave - См. Мой комментарий для дополнительной информации.

Myst 26.10.2018 19:26

Другие вопросы по теме