Chunking WebSocket Transmission

так как я'Используя соединения WebSocket на более регулярной основе, меня интересовало, как все работает под капотом. Так что я некоторое время копался в бесконечных спецификациях, но пока не могне могу найти что-нибудь опорция самого потока передачи.

Протокол WebSocket вызывает егофреймы данных (который описывает чистый поток данных, поэтому его также называютнеуправляемые кадры). Насколько я понял в спецификации, нет определенной максимальной длины и определенного значения MTU (максимальной единицы передачи), что, в свою очередь, означает, что один фрейм данных WebSocket может содержать, по спецификации (!), Бесконечное количество данных (пожалуйста, поправьте меня, если яя не прав, яя еще студент по этому вопросу).

Прочитав это, я мгновенно настроил свой маленькийУзел Сервер WebSocket. Так как у меня сильныйAjax история (также о потоковой передаче и Comet), мои ожидания изначально были такими:должен быть какой-то интерактивный режим для чтения данных во время их передачи ", Но я не прав там, ат я?

Я начал с малого4kb данных.

сервер

testSocket.emit( 'data', new Array( 4096 ).join( 'X' ) );

и, как и ожидалось, это приходит на клиент как один блок данных

клиент

wsInstance.onmessage = function( data ) {
    console.log( data.length ); // 4095
};

таким образом, я увеличил полезную нагрузку, и я на самом деле снова ожидал, что в какой-то момент, на стороне клиентаonmessage Обработчик будет запускать повторно, эффективно блокируя передачу. Но к моему шоку этого так и не случилось (узел-сервер, проверено наFire Fox,хром а такжесафари сторона клиента). Моя самая большая полезная нагрузка была80 МБ

testSocket.emit( 'data', new Array( 1024*1024*80 ).join( 'X' ) );

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

Есть ли возможность разделить эти потоки, подобно режиму XHR readyState3?Есть ли ограничение по размеру для одного кадра данных?Разве веб-сокеты не должны передавать такие большие полезные нагрузки? (что заставило бы меня снова задуматься, почему нетопределенный максимальный размер)

Я все еще могу смотреть с неправильной точки зрения на WebSockets, возможно, необходимость в отправке больших объемов данных просто отсутствует, и вам следует логически разбивать / разбивать любые данные перед отправкой?

Ответы на вопрос(2)

Ваш ответ на вопрос