https://stackoverflow.com/a/42465368/462608
¿Dónde podrían los websockets todavía tener un lugar? El más grande es servidor->navegador empujado datos binarios. HTTP/2 permite datos binarios enviados por el servidor->navegador, pero no están expuestos en el navegador JS. Para aplicaciones como empujar cuadros de audio y video, esta es una razón para usar websockets.
¿Qué significa cuando dicen que los datos binarios enviados no están expuestos en el navegador JS? Solicito algún ejemplo que me ayude a entender esto.
https://stackoverflow.com/a/47108355
Entonces, HTTP2 push es realmente algo entre su navegador y el servidor, mientras que Websockets realmente expone las API que pueden usar tanto el cliente (javascript, si se ejecuta en el navegador) como el código de la aplicación (que se ejecuta en el servidor) para transferir datos en tiempo real.
Solicito algunos ejemplos para que entienda que el significado de HTTP2 push is really something between your browser and server
y Websockets (socket.io) tiene una API que pueden usar los clientes.
¿Qué significa todo esto?
Aquí, estamos hablando del paso de mensajes bidireccionales (bidi) entre el servidor y el cliente . En su caso/pregunta, el cliente es un navegador .
Para entender lo que está pasando, debemos entender qué son HTTP/2 y WebSocket.
send
para enviar un mensaje al servidor. Y viceversa, el servidor puede enviar un mensaje al navegador usando la misma transmisión/canalAsí que ahora podemos tratar de responder a las preguntas
¿Qué significa cuando dicen que los datos binarios enviados no están expuestos en el navegador JS?
Significa que si el servidor "empuja" datos adicionales en su solicitud, no lo sabrá en JavaScript.
fetch('/index.html') // Server respond with index.html data and // "Push" index.css data but in response you get only index.html data .then((res) => res.text()).then(console.log) // Only index.html data
Entonces, HTTP2 push es realmente algo entre su navegador y el servidor, mientras que Websockets realmente expone las API que pueden usar tanto el cliente (javascript, si se ejecuta en el navegador) como el código de la aplicación (que se ejecuta en el servidor) para transferir datos en tiempo real.
El navegador puede utilizar los datos adicionales "Push" de HTTP/2 para completar la memoria caché del navegador. Puedes leer sobre esto aquí . Con WebSocket puede obtener cualquier dato del servidor utilizando la propiedad onmessage
de WebSocket en JavaScript
websocket.addEventListener('message', (data) => { console.log(data) // Pushed by server data })
¡ PERO ! El navegador proporciona la funcionalidad de eventos enviados por el servidor (SSE) que le permite usar flujo HTTP/2 pero en modo de solo lectura. Significa que puede suscribirse a los eventos del servidor, pero no puede enviar eventos del cliente al servidor. Por lo tanto, solo funciona en una dirección (del servidor -> al cliente). Además, si el servidor no es compatible con el navegador HTTP/2, recurra a HTTP/1.x para SSE