Может быть этот ранее существовавший ответ поможет дать некоторую ссылку для обсуждения.
Использование фреймов и наличие протокола на основе массажа (по сравнению с протоколом на основе потока) облегчает написание веб-ориентированных приложений.
Общие действия, такие как отправка данных JSON, становятся проще и не требуют от каждого приложения реализации уровня буферизации / кэширования сетевых данных для фрагментированных сообщений.
РЕДАКТИРОВАТЬ (отвечая на комментарий)
Уровень TCP / IP гарантирует доставку и упорядочение сетевых пакетов, но не имеет понятия длины данных - это потоковый протокол, который обещает, что поток будет поступать в порядке, не более того.
Если какие-либо данные поступают не по порядку, то уровень протокола TCP / IP будет переупорядочивать данные. Для этого может потребоваться внутренний кэш / буфер, который будет хранить существующие данные в ожидании отсутствующих данных.
Напротив, WebSocket основан на сообщениях и знает длину данных сообщения.
Во фреймах WebSocket используется заголовок с длиной данных (общая / частичная), позволяющий уровню протокола WebSocket объединять все данные в единое целое, даже если они распределены по нескольким пакетам TCP / IP или (даже) фреймам WebSocket.
Для этого требуется, чтобы уровень протокола сохранял данные во внутреннем буфере до тех пор, пока не будут получены все ожидаемые данные в сообщении. Протокол WebSocket будет пересылать сообщение приложению только тогда, когда будут получены все его данные.
Эта «привязка к данным» для извлечения «единиц» сообщения из потока является элементом кэширования / буферизации, о котором я говорил.