Chunking WebSocket de transmisión

ya que estoy usando conexiones WebSocket en bases más regulares, estaba interesado en cómo funcionan las cosas bajo el capó. Así que me sumergí en los documentos de especificaciones sin fin por un tiempo, pero hasta ahora no podía encontrar nada acerca defragmentando el flujo de transmisión en sí.

El protocolo WebSocket lo llamamarcos de datos (que describe el flujo de datos puro, por lo que también se llamamarcos sin control). Hasta donde entendí la especificación, no hay una longitud máxima definida ni un valor definido de MTU (unidad de transferencia máxima), lo que a su vez significa que un solo marco de datos WebSocket puede contener, por especificación (!), Una cantidad infinita de datos (Por favor corríjame si estoy equivocado aquí, todavía soy un estudiante en esto).

Después de leer eso, instalé instantáneamente mi pequeñaNodo Servidor websocket. Ya que tengo un fuerteAjax historia (también en streaming y cometa), mis expectativas eran originales ",debe haber algún tipo de modo interactivo para leer datos mientras se transfiere". Pero estoy equivocado allí, ¿no es así?

Comencé pequeño, con4kb de datos.

servidor

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

y como era de esperar, esto llega al cliente como un fragmento de datos

cliente

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

Así que aumenté la carga útil y en realidad estaba esperando otra vez, que en algún momento, el lado del clienteonmessage el manejador disparará repetidamente, efectivamente dividiendo la transmisión. Pero para mi sorpresa, nunca sucedió (servidor de nodo, probado enFirefox, cromo ysafari lado del cliente). Mi mayor carga útil fue80 MB

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

y todavía llegó en una gran parte de datos en el cliente. Por supuesto, esto toma un tiempo incluso si tiene una conexión bastante buena. Las preguntas aquí están

¿Existe alguna posibilidad de fragmentar esas transmisiones, similar al modo XHR readyState3? ?¿Hay algún límite de tamaño para un único marco de datos ws? ?¿Se supone que los websockets no transfieren cargas tan grandes? (lo que me haría preguntarme otra vez por qué no hay un tamaño máximo definido)

Es posible que aún tenga una perspectiva errónea en WebSockets, probablemente la necesidad de enviar grandes cantidades de datos no existe y usted debería fragmentar / dividir los datos lógicamente antes de enviarlos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta