Websocket на основе фрейма - PullRequest
       8

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

0 голосов
/ 26 октября 2018

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

1 Ответ

0 голосов
/ 26 октября 2018

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

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

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


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

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

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

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

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

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

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

...