{"id":83204,"date":"2022-09-08T23:23:27","date_gmt":"2022-09-08T21:23:27","guid":{"rendered":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/"},"modified":"2021-07-06T10:07:59","modified_gmt":"2021-07-06T08:07:59","slug":"experimentar-con-quictransport","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/","title":{"rendered":"Experimentieren Sie mit QuicTransport"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Antecedentes\" >Antecedentes<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFQue-es-QuicTransport\" >\u00bfQu\u00e9 es QuicTransport?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFQue-es-WebTransport\" >\u00bfQu\u00e9 es WebTransport?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Casos-de-uso\" >Casos de uso<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Estado-actual\" >Estado actual<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Vinculacion-de-QuicTransport-con-otras-tecnologias\" >Vinculaci\u00f3n de QuicTransport con otras tecnolog\u00edas<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFQuicTransport-es-un-reemplazo-de-WebSockets\" >\u00bfQuicTransport es un reemplazo de WebSockets?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFQuicTransport-es-lo-mismo-que-una-API-de-socket-UDP\" >\u00bfQuicTransport es lo mismo que una API de socket UDP?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFEs-QuicTransport-una-alternativa-a-los-canales-de-datos-WebRTC\" >\u00bfEs QuicTransport una alternativa a los canales de datos WebRTC?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Pruebalo\" >Pru\u00e9balo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Utilizando-la-API\" >Utilizando la API<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Conectarse-a-un-servidor\" >Conectarse a un servidor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#API-de-datagramas\" >API de datagramas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#API-de-Streams\" >API de Streams<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#SendStream\" >SendStream<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#ReceiveStream\" >ReceiveStream<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#BidirectionalStream\" >BidirectionalStream<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Mas-ejemplos\" >M\u00e1s ejemplos<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Habilitacion-de-soporte-durante-la-prueba-de-origen\" >Habilitaci\u00f3n de soporte durante la prueba de origen<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#QuicTransport-en-DevTools-de-Chrome\" >QuicTransport en DevTools de Chrome<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Consideraciones-de-privacidad-y-seguridad\" >Consideraciones de privacidad y seguridad<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Realimentacion\" >Realimentaci\u00f3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Comentarios-sobre-el-diseno-de-la-API\" >Comentarios sobre el dise\u00f1o de la API<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFProblema-con-la-implementacion\" >\u00bfProblema con la implementaci\u00f3n?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#%C2%BFPlanea-usar-la-API\" >\u00bfPlanea usar la API?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Discusion-General\" >Discusi\u00f3n General<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/#Agradecimientos\" >Agradecimientos<\/a><\/li><\/ul><\/nav><\/div>\n<p><\/p>\n<div>\n<header class=\"w-article-header\">\n<p class=\"w-article-header__subhead w-mb--non\">\n<p>          QuicTransport es una nueva API que ofrece mensajer\u00eda cliente-servidor bidireccional de baja latencia.  Obtenga m\u00e1s informaci\u00f3n sobre sus casos de uso y c\u00f3mo dar comentarios sobre el futuro de la implementaci\u00f3n.\n        <\/p>\n<p>\n          <time>8 de junio de 2020<\/time><br \/>\n            Actualizado <time>8 de junio de 2020<\/time>\n        <\/p>\n<\/header>\n<h2 id=\"background\"><span class=\"ez-toc-section\" id=\"Antecedentes\"><\/span>Antecedentes <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3 id=\"what's-quictransport\"><span class=\"ez-toc-section\" id=\"%C2%BFQue-es-QuicTransport\"><\/span>\u00bfQu\u00e9 es QuicTransport? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#quic-transport\">QuicTransport<\/a> es una API web que usa <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.chromium.org\/quic\">QUIC<\/a> protocolo en un transporte bidireccional, no HTTP.  Est\u00e1 dise\u00f1ado para comunicaciones bidireccionales entre un cliente web y un servidor QUIC.  Admite el env\u00edo de datos de manera poco confiable mediante sus API de datagramas y de manera confiable mediante sus API de transmisi\u00f3n.<\/p>\n<p><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-ietf-quic-datagram-00\">Datagramas<\/a> son ideales para enviar y recibir datos que no necesitan fuertes garant\u00edas de entrega.  Los paquetes individuales de datos est\u00e1n limitados en tama\u00f1o por el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Maximum_transmission_unit\">unidad de transmisi\u00f3n m\u00e1xima (MTU)<\/a> de la conexi\u00f3n subyacente, y pueden o no transmitirse con \u00e9xito, y si se transfieren, pueden llegar en un orden arbitrario.  Estas caracter\u00edsticas hacen que las API de datagramas sean ideales para la transmisi\u00f3n de datos de baja latencia y el mejor esfuerzo.  Puedes pensar en los datagramas como <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/User_Datagram_Protocol\">protocolo de datagramas de usuario (UDP)<\/a> mensajes, pero cifrados y controlados por la congesti\u00f3n.<\/p>\n<p>Las API de streams, por el contrario, proporcionan <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Reliability_(computer_networking)\">de confianza<\/a>, transferencia de datos ordenada.  Ellos son muy adecuado a escenarios en los que requiere enviar o recibir uno o m\u00e1s flujos de datos ordenados.  El uso de diversos flujos QUIC es an\u00e1logo a determinar diversos <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Transmission_Control_Protocol\">TCP<\/a> conexiones, pero los flujos QUIC son livianos y se pueden abrir y cerrar sin mucha sobrecarga.<\/p>\n<h3 id=\"what's-webtransport\"><span class=\"ez-toc-section\" id=\"%C2%BFQue-es-WebTransport\"><\/span>\u00bfQu\u00e9 es WebTransport? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>QuicTransport es una parte del mayor <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/\">Iniciativa de WebTransport<\/a>.  WebTransport es una colecci\u00f3n de API para enviar y recibir datos entre un cliente web y un servidor.  QuicTransport es la interfaz para usar el protocolo QUIC en el contexto de las comunicaciones WebTransport bidireccionales.<\/p>\n<p>Chrome est\u00e1 implementando la parte QuicTransport de WebTransport primero, antes que cualquiera de las otras interfaces propuestas.  El equipo de Chrome ha tomado la decisi\u00f3n de empezar con QuicTransport luego de hablar con los desarrolladores web sobre sus casos de uso.  Esperamos solicitar retroalimentaci\u00f3n temprana sobre el esfuerzo general de WebTransport basado en las experiencias de los desarrolladores con QuicTransport.<\/p>\n<h3 id=\"use-cases\"><span class=\"ez-toc-section\" id=\"Casos-de-uso\"><\/span>Casos de uso <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Esta es una peque\u00f1a lista de las posibles formas en que los desarrolladores pueden utilizar QuicTransport.<\/p>\n<ul>\n<li>Enviar el estado del juego a intervalos regulares con una latencia m\u00ednima a un servidor mediante mensajes peque\u00f1os, poco fiables y fuera de orden.<\/li>\n<li>Recibir flujos de medios enviados desde un servidor con una latencia m\u00ednima, sin tener en cuenta otros flujos de datos.<\/li>\n<li>Recibir notificaciones enviadas desde un servidor mientras una p\u00e1gina web est\u00e1 abierta.<\/li>\n<\/ul>\n<p>Como parte del procedimiento de prueba de origen, nos interesa saber m\u00e1s acerca de c\u00f3mo planea utilizar QuicTransport.<\/p>\n<h2 id=\"status\"><span class=\"ez-toc-section\" id=\"Estado-actual\"><\/span>Estado actual <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"w-table-wrapper\">\n<div class=\"w-table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>Paso<\/th>\n<th>Estado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1. Crea un explicador<\/td>\n<td><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/WICG\/web-transport\/blob\/master\/explainer.md\">Completar<\/a><\/td>\n<\/tr>\n<tr>\n<td>2. Crear borrador inicial de especificaci\u00f3n<\/td>\n<td><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#quic-transport\">Completar<\/a><\/td>\n<\/tr>\n<tr>\n<td><strong>3. Recopile comentarios y repita el dise\u00f1o<\/strong><\/td>\n<td><strong>En progreso<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>4. Prueba de origen<\/strong><\/td>\n<td><strong>En progreso<\/strong><\/td>\n<\/tr>\n<tr>\n<td>5. Lanzamiento<\/td>\n<td>No empezado<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"quictransport's-relationship-to-other-technologies\"><span class=\"ez-toc-section\" id=\"Vinculacion-de-QuicTransport-con-otras-tecnologias\"><\/span>Vinculaci\u00f3n de QuicTransport con otras tecnolog\u00edas <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3 id=\"is-quictransport-a-replacement-for-websockets\"><span class=\"ez-toc-section\" id=\"%C2%BFQuicTransport-es-un-reemplazo-de-WebSockets\"><\/span>\u00bfQuicTransport es un reemplazo de WebSockets? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Quiz\u00e1.  Hay casos de uso en los que <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WebSockets_API\">WebSockets<\/a> o QuicTransport pueden ser protocolos de comunicaci\u00f3n v\u00e1lidos para utilizar.<\/p>\n<p>Las comunicaciones de WebSockets se modelan en torno a un flujo de mensajes \u00fanico, confiable y ordenado, lo cual est\u00e1 bien para algunos tipos de necesidades de comunicaci\u00f3n.  Si requiere esas caracter\u00edsticas, las API de streams de QuicTransport adem\u00e1s pueden proporcionarlas.  En comparaci\u00f3n, las API de datagramas de QuicTransport brindan una entrega de baja latencia, sin garant\u00edas de confiabilidad o pedidos, por lo que no son un reemplazo directo de WebSockets.<\/p>\n<p>El uso de QuicTransport, mediante las API de datagramas o a trav\u00e9s de diversos instancias de API Streams concurrentes, significa que no tiene que preocuparse por <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Head-of-line_blocking\">bloqueo de cabecera de l\u00ednea<\/a>, que puede ser un obst\u00e1culo con WebSockets.  Al mismo tiempo, existen beneficios de rendimiento al determinar nuevas conexiones, dado que <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.fastly.com\/blog\/quic-handshake-tls-compression-certificates-extension-study\">Apret\u00f3n de manos r\u00e1pido<\/a> es m\u00e1s r\u00e1pido que iniciar TCP sobre TLS.<\/p>\n<p>QuicTransport es parte de un nuevo borrador de especificaci\u00f3n y, como tal, el ecosistema WebSocket en torno a las bibliotecas de cliente y servidor es hoy en d\u00eda mucho m\u00e1s s\u00f3lido.  Si requiere algo que funcione \u00abfuera de la caja\u00bb con configuraciones de servidor comunes y con un amplio soporte de cliente web, WebSockets es una mejor opci\u00f3n hoy.<\/p>\n<h3 id=\"is-quictransport-the-same-as-a-udp-socket-api\"><span class=\"ez-toc-section\" id=\"%C2%BFQuicTransport-es-lo-mismo-que-una-API-de-socket-UDP\"><\/span>\u00bfQuicTransport es lo mismo que una API de socket UDP? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>No. QuicTransport no es un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.w3.org\/TR\/raw-sockets\/\">API de socket UDP<\/a>.  Aunque QUIC utiliza UDP \u00abbajo el cap\u00f3\u00bb, QuicTransport tiene requerimientos en torno al cifrado y el control de la congesti\u00f3n que lo hacen m\u00e1s que una API b\u00e1sica de UDP Socket.<\/p>\n<h3 id=\"is-quictransport-an-alternative-to-webrtc-data-channels\"><span class=\"ez-toc-section\" id=\"%C2%BFEs-QuicTransport-una-alternativa-a-los-canales-de-datos-WebRTC\"><\/span>\u00bfEs QuicTransport una alternativa a los canales de datos WebRTC? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>S\u00ed, para conexiones cliente-servidor.  QuicTransport comparte muchas de las mismas propiedades que <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/RTCDataChannel\">Canales de datos WebRTC<\/a>, a\u00fan cuando los protocolos subyacentes son diferentes.<\/p>\n<div class=\"w-aside w-aside--note\">\n<p>Los canales de datos WebRTC admiten comunicaciones de igual a igual, pero QuicTransport solo admite la conexi\u00f3n cliente-servidor.  Si cuenta con varios clientes que necesitan hablar de forma directa entre s\u00ed, QuicTransport no es una opci\u00f3n factible.<\/p>\n<\/div>\n<p>De forma general, ejecutar un servidor compatible con QUIC necesita menos instalaci\u00f3n y configuraci\u00f3n que mantener un servidor WebRTC, lo que conlleva entender varios protocolos (<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WebRTC_API\/Connectivity#ICE_candidates\">HIELO<\/a>, <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/webrtc-security.github.io\/#4.3.1.\">DTLS<\/a>y <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/RTCSctpTransport\">SCTP<\/a>) para obtener un transporte que funcione.  WebRTC conlleva muchas m\u00e1s piezas m\u00f3viles que podr\u00edan conducir a negociaciones fallidas entre cliente y servidor.<\/p>\n<p>La API de QuicTransport se dise\u00f1\u00f3 teniendo en cuenta los casos de uso de los desarrolladores web, y deber\u00eda sentirse m\u00e1s como escribir c\u00f3digo de plataforma web moderna que utilizar las interfaces de canal de datos de WebRTC. <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=302019\">A diferencia de WebRTC<\/a>, QuicTransport se admite dentro de <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Workers_API\/Using_web_workers\">Empleados web<\/a>, que le posibilita realizar comunicaciones cliente-servidor sin tener en cuenta una p\u00e1gina HTML determinada.  Debido a que QuicTransport expone un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/streams.spec.whatwg.org\/\">Corrientes<\/a>-interfaz compatible, admite optimizaciones alrededor <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/streams.spec.whatwg.org\/#backpressure\">contrapresi\u00f3n<\/a>.<\/p>\n<p>A pesar de todo, si ya dispone de una configuraci\u00f3n de cliente \/ servidor WebRTC en funcionamiento con la que est\u00e1 satisfecho, es factible que cambiar a QuicTransport no ofrezca muchas ventajas.<\/p>\n<h2 id=\"try-it-out\"><span class=\"ez-toc-section\" id=\"Pruebalo\"><\/span>Pru\u00e9balo <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>La mejor forma de experimentar con QuicTransport es usar <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/GoogleChrome\/samples\/blob\/gh-pages\/quictransport\/quic_transport_server.py\">este c\u00f3digo python<\/a> para iniciar un servidor QUIC compatible localmente.  A continuaci\u00f3n, puede usar esta p\u00e1gina con un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/googlechrome.github.io\/samples\/quictransport\/client.html\">cliente JavaScript b\u00e1sico<\/a> para probar las comunicaciones cliente \/ servidor.<\/p>\n<h2 id=\"using-the-api\"><span class=\"ez-toc-section\" id=\"Utilizando-la-API\"><\/span>Utilizando la API <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>QuicTransport se dise\u00f1\u00f3 sobre las primitivas de la plataforma web moderna, como <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Streams_API\">API de Streams<\/a>.  Se basa en gran medida en <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Using_promises\">promesas<\/a>y va bastante bien con <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn\/JavaScript\/Asynchronous\/Async_await\"><code>async<\/code>  y <code>await<\/code><\/a>.<\/p>\n<p>La prueba de origen de QuicTransport admite tres tipos distintos de tr\u00e1fico: datagramas, as\u00ed como flujos unidireccionales y bidireccionales.<\/p>\n<h3 id=\"connecting-to-a-server\"><span class=\"ez-toc-section\" id=\"Conectarse-a-un-servidor\"><\/span>Conectarse a un servidor <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Puede conectarse a un servidor QUIC creando un <code>QuicTransport<\/code> ejemplo.  El esquema de la URL debe ser <code>quic-transport<\/code>.  Debe especificar expl\u00edcitamente el n\u00famero de puerto.<\/p>\n<p>Deber\u00edas utilizar el <code>ready<\/code> promete esperar a que se establezca la conexi\u00f3n.  Esta promesa no se cumplir\u00e1 hasta que se complete la configuraci\u00f3n y se rechazar\u00e1 si la conexi\u00f3n falla en la fase QUIC \/ TLS.<\/p>\n<p>los <code>closed<\/code> La promesa se alcanza cuando la conexi\u00f3n se cierra regularmente y se rechaza si el cierre fue inesperado.<\/p>\n<p>Si el servidor rechaza la conexi\u00f3n debido a una <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-vvv-webtransport-quic-01#section-3.2\">indicaci\u00f3n del cliente<\/a> error (a modo de ejemplo, la ruta de la URL no es v\u00e1lida), entonces eso causa <code>closed<\/code> rechazar, mientras <code>ready<\/code> permanece sin solucionar.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> direcci\u00f3n url <span class=\"token operator\">=<\/span> <span class=\"token string\">'quic-transport:\/\/example.com:4999\/foo\/bar'<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> transport <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">QuicTransport<\/span><span class=\"token punctuation\">(<\/span>direcci\u00f3n url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><br>transport<span class=\"token punctuation\">.<\/span>closed<span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">The QUIC connection to <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>direcci\u00f3n url<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\"> closed gracefully.<\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">error<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'The QUIC connection to ${direcci\u00f3n url} closed due to ${error}.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><p><br><span class=\"token keyword\">await<\/span> transport<span class=\"token punctuation\">.<\/span>ready<span class=\"token punctuation\">;<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<h3 id=\"datagram\"><span class=\"ez-toc-section\" id=\"API-de-datagramas\"><\/span>API de datagramas <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Una vez que tenga una instancia de QuicTransport que est\u00e9 conectada a un servidor, puede usarla para enviar y recibir bits de datos discretos, conocidos como <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Datagram\">datagramas<\/a>.<\/p>\n<p>los <code>sendDatagrams()<\/code> el m\u00e9todo devuelve un <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WritableStream\">WritableStream<\/a><\/code>, que un cliente web puede usar para enviar datos al servidor.  los <code>receiveDatagrams()<\/code> el m\u00e9todo devuelve un <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/ReadableStream\">ReadableStream<\/a><\/code>, lo que le posibilita escuchar datos del servidor.  Ambas transmisiones son inherentemente poco confiables, por lo que es factible que el servidor no reciba los datos que escriba y viceversa.<\/p>\n<p>Ambos tipos de corrientes usan <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Uint8Array\">Uint8Array<\/a><\/code> instancias para la transferencia de datos.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><br><span class=\"token keyword\">const<\/span> ws <span class=\"token operator\">=<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">sendDatagrams<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> writer <span class=\"token operator\">=<\/span> ws<span class=\"token punctuation\">.<\/span><span class=\"token function\">getWriter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> data1 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Uint8Array<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">65<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">67<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> data2 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Uint8Array<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">68<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">69<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">70<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>data1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>data2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><br><span class=\"token keyword\">const<\/span> rs <span class=\"token operator\">=<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">receiveDatagrams<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> rs<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>value<span class=\"token punctuation\">,<\/span> done<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>done<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<div class=\"w-aside w-aside--note\">\n<p>Chrome no <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=929585\">hoy en d\u00eda<\/a> exponer un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/whatwg\/streams\/issues\/778\">iterador asincr\u00f3nico<\/a> para <code>ReadableStream<\/code>.  Por el momento, usando el <code>getReader()<\/code> m\u00e9todo combinado con un <code>while()<\/code> loop es la mejor manera de leer de la secuencia.<\/p>\n<\/div>\n<h3 id=\"stream\"><span class=\"ez-toc-section\" id=\"API-de-Streams\"><\/span>API de Streams  <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Una vez que se haya conectado al servidor, adem\u00e1s puede utilizar QuicTransport para enviar y recibir datos mediante sus API Streams.<\/p>\n<p>Cada parte de todas las transmisiones es una <code>Uint8Array<\/code>.  A diferencia de las API de datagramas, estos flujos son confiables.  Pero cada flujo es independiente, por lo que no se garantiza el orden de los datos entre los flujos.<\/p>\n<h4 id=\"sendstream\"><span class=\"ez-toc-section\" id=\"SendStream\"><\/span>SendStream <span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>UNA <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#sendstream\">SendStream<\/a><\/code> es creado por el cliente web usando el <code>createSendStream()<\/code> m\u00e9todo de un <code>QuicTransport<\/code> instancia, que devuelve una promesa para el <code>SendStream<\/code>.<\/p>\n<p>Usar el <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WritableStreamDefaultWriter\/close\">close()<\/a><\/code> m\u00e9todo del <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WritableStreamDefaultWriter\">WritableStreamDefaultWriter<\/a><\/code> asociado con la secuencia para enviar un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-ietf-quic-transport-27#section-19.8\">QUIC Stream FIN bit<\/a> al servidor.  El navegador intenta enviar todos los datos pendientes antes de cerrar el flujo QUIC asociado.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><br><span class=\"token keyword\">const<\/span> stream <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">createSendStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> writer <span class=\"token operator\">=<\/span> stream<span class=\"token punctuation\">.<\/span>writable<span class=\"token punctuation\">.<\/span><span class=\"token function\">getWriter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> data1 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Uint8Array<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">65<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">67<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> data2 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Uint8Array<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">68<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">69<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">70<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>data1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>data2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">await<\/span> writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'All data has been sent.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">catch<\/span> <span class=\"token punctuation\">(<\/span>error<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">An error occurred: <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>error<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>De la misma forma, utilice el <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WritableStreamDefaultWriter\/abort\">abort()<\/a><\/code> m\u00e9todo del <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WritableStreamDefaultWriter\">WritableStreamDefaultWriter<\/a><\/code> para enviar un <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-ietf-quic-transport-27#section-19.4\">QUIC RESET_STREAM<\/a> al servidor.  Cuando usas <code>abort()<\/code>, el navegador puede descartar cualquier dato pendiente que todav\u00eda no se haya enviado.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> ws <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">createSendStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> writer <span class=\"token operator\">=<\/span> ws<span class=\"token punctuation\">.<\/span><span class=\"token function\">getWriter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">...<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">...<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">await<\/span> writer<span class=\"token punctuation\">.<\/span><span class=\"token function\">abort<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<h4 id=\"receivestream\"><span class=\"ez-toc-section\" id=\"ReceiveStream\"><\/span>ReceiveStream <span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>UNA <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#receivestream\">ReceiveStream<\/a><\/code> es iniciado por el servidor.  Conseguir un <code>ReceiveStream<\/code> es un procedimiento de dos pasos para un cliente web.  Primero, llama al <code>receiveStreams()<\/code> m\u00e9todo de un <code>QuicTransport<\/code> instancia, que devuelve una <code>ReadableStream<\/code>.  Cada pedazo de eso <code>ReadableStream<\/code>, es, a su vez, un <code>ReceiveStream<\/code> que se puede utilizar para leer <code>Uint8Array<\/code> instancias enviadas por el servidor.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">async<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token function\">readFrom<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">receiveStream<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> receiveStream<span class=\"token punctuation\">.<\/span>readable<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>done<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>done<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><br><span class=\"token punctuation\">}<\/span><p><span class=\"token keyword\">const<\/span> rs <span class=\"token operator\">=<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">receiveStreams<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> rs<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>done<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>done<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">readFrom<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Puede detectar el cierre de una corriente utilizando el <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/ReadableStreamDefaultReader\/closed\">closed<\/a><\/code> promesa del <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/ReadableStreamDefaultReader\">ReadableStreamDefaultReader<\/a><\/code>.  Cuando la secuencia QUIC es <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-ietf-quic-transport-27#section-19.8\">cerrado con el bit FIN<\/a>, el <code>closed<\/code> La promesa se alcanza luego de leer todos los datos.  Cuando el flujo QUIC se cierra abruptamente (a modo de ejemplo, por <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/draft-ietf-quic-transport-27#section-19.4\">STREAM_RESET<\/a><\/code>), entonces el <code>closed<\/code> promesa rechazada.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> receiveStream<span class=\"token punctuation\">.<\/span>readable<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>reader<span class=\"token punctuation\">.<\/span>closed<span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'The receiveStream closed gracefully.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'The receiveStream closed abruptly.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<h4 id=\"bidirectionalstream\"><span class=\"ez-toc-section\" id=\"BidirectionalStream\"><\/span>BidirectionalStream <span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>UNA <code><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#bidirectional-stream\">BidirectionalStream<\/a><\/code> puede ser creado por el servidor o el cliente.<\/p>\n<p>Los clientes web pueden crear uno utilizando el <code>createBidirectionalStream()<\/code> m\u00e9todo de un <code>QuicTransport<\/code> instancia, que devuelve una promesa para un <code>BidirectionalStream<\/code>.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> stream <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">createBidirectionalStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Puedes escuchar un <code>BidirectionalStream<\/code> creado por el servidor con el <code>receiveBidirectionalStreams()<\/code> m\u00e9todo de un <code>QuicTransport<\/code> instancia, que devuelve una <code>ReadableStream<\/code>.  Cada pedazo de eso <code>ReadableStream<\/code>, es, a su vez, un <code>BidirectionalStream<\/code>.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> rs <span class=\"token operator\">=<\/span> transport<span class=\"token punctuation\">.<\/span><span class=\"token function\">receiveBidrectionalStreams<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> rs<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span>done<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>done<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><br><span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>UNA <code>BidirectionalStream<\/code> es solo una combinaci\u00f3n de un <code>SendStream<\/code> y <code>ReceiveStream<\/code>.  Los ejemplos de las dos secciones anteriores explican c\u00f3mo usar cada uno de ellos.<\/p>\n<h3 id=\"more-examples\"><span class=\"ez-toc-section\" id=\"Mas-ejemplos\"><\/span>M\u00e1s ejemplos <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>los <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#quic-transport\">Proyecto de especificaci\u00f3n de WebTransport<\/a> incluye varios ejemplos en l\u00ednea adicionales, junto con la documentaci\u00f3n completa de todos los m\u00e9todos y propiedades.<\/p>\n<h2 id=\"register-for-ot\"><span class=\"ez-toc-section\" id=\"Habilitacion-de-soporte-durante-la-prueba-de-origen\"><\/span>Habilitaci\u00f3n de soporte durante la prueba de origen <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.chrome.com\/origintrials\/#\/view_trial\/-6744140441987317759\">Solicita un token<\/a> por tu origen.<\/li>\n<li>Agrega el token a tus p\u00e1ginas.  Hay dos maneras de hacerlo:\n<ul>\n<li>Agregar un <code>origin-trial<\/code> <code>&lt;meta&gt;<\/code>  etiqueta al encabezado de cada p\u00e1gina.  A modo de ejemplo, esto puede verse as\u00ed: <br \/><code>&lt;meta http-equiv=\"origin-trial\" content=\"TOKEN_GOES_HERE\"&gt;<\/code><\/li>\n<li>Si puede configurar su servidor, adem\u00e1s puede agregar el token utilizando un <code>Origin-Trial<\/code> Encabezado HTTP.  El encabezado de respuesta resultante deber\u00eda verse as\u00ed:<br \/><code>Origin-Trial: TOKEN_GOES_HERE<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"quictransport-in-chrome's-devtools\"><span class=\"ez-toc-section\" id=\"QuicTransport-en-DevTools-de-Chrome\"><\/span>QuicTransport en DevTools de Chrome <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Desafortunadamente, <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\">DevTools de Chrome<\/a> el soporte para QuicTransport no est\u00e1 listo para el inicio de la prueba de origen.  Por favor, \u00abestrella\u00bb <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=1069742\">este problema de Chrome<\/a> para recibir notificaciones sobre actualizaciones en la interfaz de DevTools.<\/p>\n<h2 id=\"privacy-and-security-considerations\"><span class=\"ez-toc-section\" id=\"Consideraciones-de-privacidad-y-seguridad\"><\/span>Consideraciones de privacidad y seguridad <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Por favor vea el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/#privacy-security\">secci\u00f3n respectivo<\/a> del borrador de la especificaci\u00f3n para orientaci\u00f3n autorizada.<\/p>\n<h2 id=\"feedback\"><span class=\"ez-toc-section\" id=\"Realimentacion\"><\/span>Realimentaci\u00f3n  <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>El equipo de Chrome desea escuchar sus pensamientos y experiencias al usar esta API durante todo el procedimiento de prueba de origen.<\/p>\n<h3 id=\"feedback-about-the-api-design\"><span class=\"ez-toc-section\" id=\"Comentarios-sobre-el-diseno-de-la-API\"><\/span>Comentarios sobre el dise\u00f1o de la API <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u00bfPuede haber algo en la API que es inc\u00f3modo o no funciona como se esperaba?  \u00bfO faltan piezas que necesitas para poner en pr\u00e1ctica tu idea?<\/p>\n<p>Presentar un obst\u00e1culo en el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/WICG\/web-transport\/issues\">Repositorio de GitHub de transporte web<\/a>o agregue sus pensamientos a un obst\u00e1culo existente.<\/p>\n<h3 id=\"problem-with-the-implementation\"><span class=\"ez-toc-section\" id=\"%C2%BFProblema-con-la-implementacion\"><\/span>\u00bfProblema con la implementaci\u00f3n? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u00bfEncontraste un error con la implementaci\u00f3n de Chrome?<\/p>\n<p>Presentar un error en <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/new.crbug.com\">https:\/\/new.crbug.com<\/a>.  Incluya todos los detalles que pueda, junto con instrucciones sencillas para la reproducci\u00f3n.<\/p>\n<h3 id=\"planning-to-use-the-api\"><span class=\"ez-toc-section\" id=\"%C2%BFPlanea-usar-la-API\"><\/span>\u00bfPlanea usar la API? <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Su soporte p\u00fablico ayuda a Chrome a priorizar funciones y muestra a otros proveedores de navegadores lo importante que es brindarles soporte.<\/p>\n<ul>\n<li>Aseg\u00farese de haberse inscrito en el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.chrome.com\/origintrials\/#\/view_trial\/-6744140441987317759\">ensayo de origen<\/a> para mostrar su inter\u00e9s y proporcionar su dominio e informaci\u00f3n de contacto.<\/li>\n<li>Enviar un tweet a <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/twitter.com\/chromiumdev\">@Cromodev<\/a> con <code>#QuicTransport<\/code> y detalles sobre d\u00f3nde y c\u00f3mo lo est\u00e1 utilizando.<\/li>\n<\/ul>\n<h3 id=\"general-discussion\"><span class=\"ez-toc-section\" id=\"Discusion-General\"><\/span>Discusi\u00f3n General <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Puedes utilizar el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/groups.google.com\/a\/chromium.org\/g\/web-transport-dev\">Web-transport-dev Grupo de Google<\/a> para preguntas generales o problemas que no encajan en ninguna de las otras categor\u00edas.<\/p>\n<h2 id=\"acknowledgements\"><span class=\"ez-toc-section\" id=\"Agradecimientos\"><\/span>Agradecimientos <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Este post incorpora informaci\u00f3n del <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/wicg\/web-transport\/blob\/master\/explainer.md\">Explicador de WebTransport<\/a>, <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/wicg.github.io\/web-transport\/\">proyecto de especificaci\u00f3n<\/a>y <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/docs.google.com\/document\/d\/1UgviRBnZkMUq4OKcsAJvIQFX6UCXeCbOtX_wMgwD_es\/edit#\">documentos de dise\u00f1o relacionados<\/a>.  Gracias a los respectivos autores por otorgar esa base.<\/p>\n<p><em>La imagen principal de esta publicaci\u00f3n es de <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/unsplash.com\/photos\/dPgPoiUIiXk\">Robin Pierre<\/a> en Unsplash.<\/em><\/p>\n<p>    <web-feedback additional-questions=\"api\"><\/web-feedback>\n  <\/div>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>QuicTransport ist eine neue API, die bidirektionales Client-Server-Messaging mit geringer Latenz bietet. Erfahren Sie mehr \u00fcber seine Anwendungsf\u00e4lle und wie Sie Feedback zur Zukunft von\u2026<\/p>","protected":false},"author":1,"featured_media":83205,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1356],"tags":[],"class_list":["post-83204","post","type-post","status-publish","format-standard","has-post-thumbnail","category-dev"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Experimentar con QuicTransport - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"QuicTransport es una nueva API que ofrece mensajer\u00eda cliente-servidor bidireccional de baja latencia. Obtenga m\u00e1s informaci\u00f3n sobre sus casos de uso y\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Experimentar con QuicTransport\" \/>\n<meta property=\"og:description\" content=\"QuicTransport es una nueva API que ofrece mensajer\u00eda cliente-servidor bidireccional de baja latencia. Obtenga m\u00e1s informaci\u00f3n sobre sus casos de uso y\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-08T21:23:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"Experimentar con QuicTransport\",\"datePublished\":\"2022-09-08T21:23:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/\"},\"wordCount\":2131,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-2247626.jpg\",\"articleSection\":[\"Dev\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/\",\"name\":\"Experimentar con QuicTransport - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-2247626.jpg\",\"datePublished\":\"2022-09-08T21:23:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"QuicTransport es una nueva API que ofrece mensajer\u00eda cliente-servidor bidireccional de baja latencia. Obtenga m\u00e1s informaci\u00f3n sobre sus casos de uso y\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/experimentar-con-quictransport\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-2247626.jpg\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-2247626.jpg\",\"width\":1200,\"height\":800,\"caption\":\"hero-2247626-2559887-jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Experimentar con QuicTransport - R Marketing Digital","description":"QuicTransport ist eine neue API, die bidirektionales Client-Server-Messaging mit geringer Latenz bietet. Erfahren Sie mehr \u00fcber ihre Anwendungsf\u00e4lle und","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/","og_locale":"de_DE","og_type":"article","og_title":"Experimentar con QuicTransport","og_description":"QuicTransport es una nueva API que ofrece mensajer\u00eda cliente-servidor bidireccional de baja latencia. Obtenga m\u00e1s informaci\u00f3n sobre sus casos de uso y","og_url":"https:\/\/rmarketingdigital.com\/de\/dev\/experimentar-con-quictransport\/","og_site_name":"R Marketing Digital","article_published_time":"2022-09-08T21:23:27+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg","type":"image\/jpeg"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"Experimentar con QuicTransport","datePublished":"2022-09-08T21:23:27+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/"},"wordCount":2131,"image":{"@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg","articleSection":["Dev"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/","url":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/","name":"Experimentar con QuicTransport - R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg","datePublished":"2022-09-08T21:23:27+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"QuicTransport ist eine neue API, die bidirektionales Client-Server-Messaging mit geringer Latenz bietet. Erfahren Sie mehr \u00fcber ihre Anwendungsf\u00e4lle und","inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/rmarketingdigital.com\/dev\/experimentar-con-quictransport\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-2247626.jpg","width":1200,"height":800,"caption":"hero-2247626-2559887-jpg"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"R Digitales Marketing","description":"SEO Agentur | Werbung f\u00fcr soziale Netzwerke | Community Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"R Digitales Marketing","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/83204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/comments?post=83204"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/83204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media\/83205"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media?parent=83204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/categories?post=83204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/tags?post=83204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}