{"id":5453,"date":"2026-06-04T12:54:12","date_gmt":"2026-06-04T19:54:12","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5453"},"modified":"2026-06-04T12:54:13","modified_gmt":"2026-06-04T19:54:13","slug":"zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","title":{"rendered":"Cuestionarios de latencia cero: C\u00f3mo la replicaci\u00f3n P2P resolvi\u00f3 el problema del Wi-Fi en las conferencias"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Si alguna vez has organizado un cuestionario interactivo con una gran multitud en una sola sala de conferencias, sabes lo r\u00e1pido que el Wi-Fi local puede saturarse. Cuando decenas de dispositivos luchan simult\u00e1neamente por el ancho de banda para conectarse a servidores remotos, incluso las mejores plataformas pueden verse obstaculizadas por la congesti\u00f3n de la red, lo que genera una latencia frustrante y c\u00edrculos de carga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este desaf\u00edo de conectividad es un obst\u00e1culo com\u00fan en las reuniones y talleres de desarrolladores. La iron\u00eda es dif\u00edcil de pasar por alto: cuando los participantes est\u00e1n sentados a solo unos pocos pies de distancia en la misma habitaci\u00f3n, los datos no deber\u00edan tener que viajar hasta un servidor en la nube distante y regresar solo para sincronizar una pregunta en un grupo local de pantallas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed que constru\u00ed KahootP2P. Es un juego de preguntas estilo Kahoot para iOS que funciona completamente mediante redes de pares (P2P) locales. Sin internet. Sin enrutador. Sin nube. Solo dispositivos que se comunican directamente entre s\u00ed, impulsados por la replicaci\u00f3n P2P de Couchbase Lite Enterprise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta publicaci\u00f3n comparte la motivaci\u00f3n detr\u00e1s del proyecto, las decisiones de arquitectura involucradas y c\u00f3mo Couchbase Lite hace que las partes m\u00e1s dif\u00edciles sean sorprendentemente simples.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-problem-with-cloud-dependent-multiplayer\">El problema del modo multijugador dependiente de la nube<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kahoot es brillante. El sistema de puntuaci\u00f3n basado en la velocidad genera verdadera tensi\u00f3n, la sencilla cuadr\u00edcula de respuestas de cuatro colores funciona en cualquier tama\u00f1o de pantalla y la tabla de clasificaci\u00f3n despu\u00e9s de cada pregunta mantiene a todos enganchados. Pero tiene una dependencia fundamental: absolutamente todas las interacciones pasan por internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para un sal\u00f3n de clases con Wi-Fi dedicado, un enfoque dependiente de la nube funciona a la perfecci\u00f3n. Sin embargo, en un sal\u00f3n de conferencias abarrotado donde 200 personas comparten la misma red, ese modelo de conexi\u00f3n centralizada puede provocar r\u00e1pidamente una latencia severa y ca\u00eddas de conectividad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La latencia tambi\u00e9n importa. Kahoot otorga m\u00e1s puntos por respuestas m\u00e1s r\u00e1pidas. Cuando tu respuesta correcta tarda 800 ms en llegar al servidor en lugar de 200 ms debido a la congesti\u00f3n de la red, literalmente est\u00e1s perdiendo puntos sin que sea tu culpa. Esa no es una gran experiencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo tanto, el objetivo era lograr una latencia de red medida en milisegundos de un solo d\u00edgito, no en cientos. La \u00fanica manera de llegar ah\u00ed era eliminar internet por completo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-couchbase-lite-p2p\">\u00bfPor qu\u00e9 Couchbase Lite P2P?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En t\u00e9rminos de experiencia multijugador sin conexi\u00f3n, el framework MultipeerConnectivity de Apple gestiona el descubrimiento y el env\u00edo b\u00e1sico de mensajes entre dispositivos iOS. Pero hay un detalle: est\u00e1 dise\u00f1ado para topolog\u00edas de malla donde cada dispositivo se comunica con todos los dem\u00e1s. Para un juego de preguntas con un anfitri\u00f3n que controla el flujo, esto genera desaf\u00edos en cuanto a la consistencia y el orden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los par\u00e1metros m\u00e1s importantes incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Una \u00fanica fuente de la verdad \u2013<\/strong> El dispositivo anfitri\u00f3n debe ser la autoridad en cuanto a las puntuaciones, el tiempo de las preguntas y el estado del juego<\/li>\n\n\n\n<li><strong>Sincronizaci\u00f3n autom\u00e1tica de datos \u2013<\/strong> Cuando el anfitri\u00f3n escriba una nueva pregunta o actualice los puntajes, cada jugador deber\u00eda verla sin que yo tenga que serializar y enrutar mensajes manualmente<\/li>\n\n\n\n<li><strong>Entrega confiable \u2013<\/strong> Si la respuesta de un jugador tarda un momento en sincronizarse, no debe perderse<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La replicaci\u00f3n de igual a igual de Couchbase Lite Enterprise encaja perfectamente con esto.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El URLEndpointListener permite que un dispositivo (el host) act\u00fae como un destino de replicaci\u00f3n. Los dispositivos de los jugadores se conectan a \u00e9l utilizando un replicador est\u00e1ndar de Couchbase Lite en modo de env\u00edo y recepci\u00f3n. Esto proporciona una topolog\u00eda en estrella con el host en el centro, exactamente lo que necesita un juego con autoridad en el host.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La idea central es que no hay ninguna necesidad de construir un protocolo de mensajes personalizado. En lugar de pensar en t\u00e9rminos de \u201cenviar preguntas a todos los jugadores\u201d y \u201crecibir respuestas del jugador 3\u201d, los documentos simplemente se escriben en la base de datos local, mientras que la capa de replicaci\u00f3n se encarga de entregarlos en los lugares correctos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-architecture-documents-as-game-state\">Arquitectura: Documentos como Estado del Juego<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Todo el estado del juego reside en documentos de Couchbase Lite. As\u00ed es como se modela:<strong>Juego<\/strong> Un solo documento que rastrea el t\u00edtulo del juego, el c\u00f3digo de uni\u00f3n, la fase (sala de espera\/preguntando\/cerrado\/terminado) y el recuento de preguntas. Cuando el anfitri\u00f3n cambia la fase, la replicaci\u00f3n la env\u00eda a todos los jugadores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Juego<\/strong> Un solo documento que rastrea el t\u00edtulo del juego, el c\u00f3digo de uni\u00f3n, la fase (sala de espera\/preguntando\/cerrado\/terminado) y el recuento de preguntas. Cuando el anfitri\u00f3n cambia la fase, la replicaci\u00f3n la env\u00eda a todos los jugadores.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func sta<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>EstadoDeLaPregunta \u2013<\/strong> Un documento que le indica a cada jugador en qu\u00e9 pregunta se encuentra y si todav\u00eda est\u00e1 abierta para recibir respuestas. El anfitri\u00f3n actualiza este documento para avanzar en el juego.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Preguntas \u2013<\/strong> Documentos individuales para cada pregunta, sincronizados del anfitri\u00f3n a los jugadores cuando el juego comienza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Respuestas \u2013<\/strong> Cada jugador escribe su respuesta como un documento. La replicaci\u00f3n la env\u00eda al anfitri\u00f3n para su puntuaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resultados de respuestas \u2013<\/strong> Despu\u00e9s de la puntuaci\u00f3n, el anfitri\u00f3n escribe los documentos de resultados, los cuales se replican al jugador correspondiente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tabla de clasificaci\u00f3n \u2013 <\/strong>&nbsp;Un solo documento con entradas clasificadas, actualizado por el anfitri\u00f3n despu\u00e9s de cada pregunta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La belleza de este enfoque es que la sincronizaci\u00f3n es bidireccional y autom\u00e1tica. Los jugadores env\u00edan las respuestas hacia arriba, el anfitri\u00f3n env\u00eda los resultados hacia abajo, y Couchbase Lite se encarga de toda la resoluci\u00f3n de conflictos y el ordenamiento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Descubrimiento: Encontrar juegos sin servidor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de que los dispositivos puedan replicar datos, necesitan encontrarse. Bonjour (el protocolo de red de configuraci\u00f3n cero de Apple) se utiliza para esto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando el anfitri\u00f3n inicia una partida, ocurren dos cosas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Un URLEndpointListener se inicia en un puerto disponible.<\/li>\n\n\n\n<li>Se publica un servicio Bonjour que anuncia ese puerto.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>rtHosting(gameId: String) throws {\n    var listenerConfig = URLEndpointListenerConfiguration(\n        collections: [collection]\n    )\n    listenerConfig.port = 0  \/\/ Dejar que el SO elija un puerto\n    listenerConfig.disableTLS = true\n\n    let urlListener = URLEndpointListener(config: listenerConfig)\n    try urlListener.start()\n\n    \/\/ Anunciar a trav\u00e9s de Bonjour para que los jugadores puedan encontrarnos\n    let service = NetService(\n        domain: \"\",\n        type: \"_quizblitz._tcp.\",\n        name: \"QuizBlitz-\\(gameId.prefix(8))\",\n        port: Int32(urlListener.port ?? 0)\n    )\n    service.publish()\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Del lado del jugador, un NetServiceBrowser busca el tipo de servicio _quizblitz._tcp. Cuando encuentra una partida, el jugador toca para unirse, y un replicador de Couchbase Lite se conecta al URLEndpointListener del host:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func connectToHost(host: String, port: Int) {\n    let url = URL(string: \"ws:\/\/\\(host):\\(port)\/\\(db.name)\")!\n    let targetEndpoint = URLEndpoint(url: url)\n\n    var config = ReplicatorConfiguration(\n        collections: [colConfig],\n        target: targetEndpoint\n    )\n    config.replicatorType = .pushAndPull\n    config.continuous = true\n\n    let repl = Replicator(config: config)\n    repl.start()\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Eso es todo. Una vez que el replicador est\u00e9 funcionando, los documentos fluyen autom\u00e1ticamente en ambas direcciones. Sin manejo manual de mensajes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Puntuaci\u00f3n: La velocidad importa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al igual que en Kahoot, las respuestas correctas m\u00e1s r\u00e1pidas obtienen m\u00e1s puntos. Pero aqu\u00ed est\u00e1 la parte dif\u00edcil: en una configuraci\u00f3n P2P, no puedes simplemente usar marcas de tiempo de reloj de pared porque los dispositivos podr\u00edan no tener relojes sincronizados (y sin internet, no hay servidor NTP con el cual sincronizarse).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta soluci\u00f3n utiliza el reloj mon\u00f3tono del host (mediante mach_continuous_time) como la \u00fanica referencia de tiempo. Cuando el host abre una pregunta, registra su propio tiempo de actividad en nanosegundos. Cuando un documento de respuesta se replica en el host, este registra la hora de recepci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let timeDelta = TimingService.elapsedSeconds(\n    from: startNs, to: receivedNs\n)\nlet timeBonus = max(0, 1.0 - (timeDelta \/ Double(timeLimitSeconds)))\nlet points = isCorrect ? max(100, Int(1000.0 * timeBonus)) : 0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfEs esto perfectamente justo? No. La latencia de replicaci\u00f3n agrega unos milisegundos de ruido. Pero en la pr\u00e1ctica, a trav\u00e9s de una red Wi-Fi local, el retraso de replicaci\u00f3n es inferior a 50 ms. Para un juego donde el l\u00edmite de tiempo es de 15 segundos, ese retraso es insignificante. La persona que sabe la respuesta y toca m\u00e1s r\u00e1pido seguir\u00e1 ganando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La puntuaci\u00f3n funciona en una escala progresiva: responde al instante y obt\u00e9n 1000 puntos. Responde en el \u00faltimo segundo y obt\u00e9n 100 puntos. Responde mal y obtienes cero. Esto crea la misma sensaci\u00f3n de urgencia que experimentas en Kahoot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">UI reactivo con Combine<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La interfaz de usuario debe actualizarse en tiempo real a medida que los documentos cambian. La integraci\u00f3n de Combine de Couchbase Lite hace que esto sea limpio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.collectionChangePublisher()\n    .receive(on: DispatchQueue.main)\n    .sink { [weak self] change in\n        self?.handleCollectionChange(change)\n    }\n    .store(in: &amp;cancellables)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Este publicador se activa cuando cualquier documento de la colecci\u00f3n cambia, ya sea por escrituras locales o por replicaci\u00f3n entrante. El controlador comprueba si el cambio es relevante (el mismo ID de juego) y actualiza el estado correspondiente: nuevo jugador unido, respuesta recibida, tabla de clasificaci\u00f3n actualizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por el lado de SwiftUI, los motores son clases ObservableObject con propiedades @Published. Cuando el anfitri\u00f3n escribe un nuevo documento QuestionState y este se replica a un jugador, el ClientEngine del jugador detecta el cambio a trav\u00e9s del publicador de la colecci\u00f3n, actualiza sus propiedades @Published y SwiftUI vuelve a renderizar la vista. Toda la cadena, desde que \u201cel anfitri\u00f3n presiona Siguiente pregunta\u201d hasta que \u201cel jugador ve la nueva pregunta\u201d, toma menos de 100 ms en una red local.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La integraci\u00f3n con Codable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las cosas que hizo que el desarrollo fuera m\u00e1s r\u00e1pido fue la compatibilidad con Codable de Couchbase Lite. En lugar de mapear manualmente entre documentos y objetos de Swift, los modelos simplemente pod\u00edan definirse como clases Codable:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Guardar un modelo directamente\ntry collection.save(from: game)\n\n\/\/ Cargar de nuevo como un objeto tipado\nlet game = try collection.document(id: docId, as: Game.self)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El contenedor de propiedades @DocumentID asigna autom\u00e1ticamente el ID del documento de Couchbase Lite a una propiedad en el modelo. Esto hace posible trabajar con objetos Swift normales en todas partes y permite que el SDK maneje la serializaci\u00f3n autom\u00e1ticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para las consultas, utilic\u00e9 SQL++:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let sql = \"SELECT META().id, * FROM _ WHERE gameId = '\\(gameId)' AND displayName IS NOT MISSING\"\nlet query = try database.createQuery(sql)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Puntos clave<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los documentos como estado de juego funcionan sorprendentemente bien. Al principio hubo escepticismo sobre el uso de un protocolo de replicaci\u00f3n de bases de datos para la sincronizaci\u00f3n de juegos en tiempo real. En la pr\u00e1ctica, la latencia es lo suficientemente baja como para que se sienta instant\u00e1neo, y obtienes entrega confiable, resoluci\u00f3n de conflictos y persistencia gratis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La topolog\u00eda en estrella es la mejor opci\u00f3n para los juegos con servidor autoritativo. Una red en malla suena bien, pero cuando un dispositivo necesita ser la autoridad en la puntuaci\u00f3n y el flujo del juego, un modelo de estrella con el anfitri\u00f3n en el centro es m\u00e1s sencillo y predecible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitas internet para la mayor\u00eda de los juegos multijugador local. Esto puede parecer obvio, pero es f\u00e1cil recurrir por defecto a \u201ccrear un servidor\u201d cuando los dispositivos que quieres conectar est\u00e1n literalmente en la misma habitaci\u00f3n. La replicaci\u00f3n P2P de Couchbase Lite elimina toda esa dependencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bonjour discovery just works. Bonjour en iOS es totalmente s\u00f3lido. Los dispositivos se encuentran entre 1 y 2 segundos de manera consistente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pru\u00e9balo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El c\u00f3digo fuente completo est\u00e1 en GitHub: <a href=\"http:\/\/github.com\/midopooler\/KahootP2P\">github.com\/midopooler\/KahootP2P<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Necesitar\u00e1s Couchbase Lite Enterprise (para el URLEndpointListener) y dos o m\u00e1s dispositivos iOS en la misma red local. Simplemente clona el repositorio, ejecuta xcodegen generate, compila y estar\u00e1s jugando en un minuto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si est\u00e1s creando cualquier tipo de experiencia multijugador local, colaborativa o que funcione sin conexi\u00f3n en dispositivos m\u00f3viles, vale la pena considerar las capacidades P2P de Couchbase Lite. Elimina la necesidad de escribir una sola l\u00ednea de c\u00f3digo de red m\u00e1s all\u00e1 de \u201ciniciar el oyente\u201d y \u201ciniciar el replicador\u201d, lo que ahorra una cantidad significativa de tiempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El juego es sencillo, pero el patr\u00f3n se aplica mucho m\u00e1s all\u00e1 de los cuestionarios, incluyendo la recolecci\u00f3n de datos en campo con sincronizaci\u00f3n de equipos, la toma colaborativa de notas en modo avi\u00f3n y sistemas de punto de venta que siguen funcionando cuando se cae internet. Cada vez que necesitas que m\u00faltiples dispositivos compartan estado sin depender de la nube, esta misma arquitectura funciona.<\/p>","protected":false},"excerpt":{"rendered":"<p>If you have ever hosted an interactive quiz with a large crowd in a single conference room, you know how quickly local Wi-Fi can bottleneck. When dozens of devices simultaneously fight for bandwidth to connect to remote servers, even the best platforms can get bogged down by network congestion, leading to frustrating latency and loading [&hellip;]<\/p>\n","protected":false},"author":85668,"featured_media":5460,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[131],"tags":[],"ppma_author":[1002],"class_list":["post-5453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-lite"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem\" \/>\n<meta property=\"og:description\" content=\"If you have ever hosted an interactive quiz with a large crowd in a single conference room, you know how quickly local Wi-Fi can bottleneck. When dozens of devices simultaneously fight for bandwidth to connect to remote servers, even the best platforms can get bogged down by network congestion, leading to frustrating latency and loading [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-04T19:54:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-04T19:54:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pulkit Midha - Developer Evangelist\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pulkit Midha - Developer Evangelist\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\"},\"author\":{\"name\":\"Pulkit Midha - Developer Evangelist\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/a5479b7c0b1e18e90b26eb1c23614247\"},\"headline\":\"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem\",\"datePublished\":\"2026-06-04T19:54:12+00:00\",\"dateModified\":\"2026-06-04T19:54:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\"},\"wordCount\":1574,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png\",\"articleSection\":[\"Couchbase Lite\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\",\"name\":\"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png\",\"datePublished\":\"2026-06-04T19:54:12+00:00\",\"dateModified\":\"2026-06-04T19:54:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/a5479b7c0b1e18e90b26eb1c23614247\",\"name\":\"Pulkit Midha - Developer Evangelist\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g3d93c973517960a7fdfc174e5ccac893\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g\",\"caption\":\"Pulkit Midha - Developer Evangelist\"},\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/pulkitmidha\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem - The Couchbase Blog","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:\/\/www.couchbase.com\/blog\/es\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","og_locale":"es_MX","og_type":"article","og_title":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem","og_description":"If you have ever hosted an interactive quiz with a large crowd in a single conference room, you know how quickly local Wi-Fi can bottleneck. When dozens of devices simultaneously fight for bandwidth to connect to remote servers, even the best platforms can get bogged down by network congestion, leading to frustrating latency and loading [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","og_site_name":"The Couchbase Blog","article_published_time":"2026-06-04T19:54:12+00:00","article_modified_time":"2026-06-04T19:54:13+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png","type":"image\/png"}],"author":"Pulkit Midha - Developer Evangelist","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Pulkit Midha - Developer Evangelist","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/"},"author":{"name":"Pulkit Midha - Developer Evangelist","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a5479b7c0b1e18e90b26eb1c23614247"},"headline":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem","datePublished":"2026-06-04T19:54:12+00:00","dateModified":"2026-06-04T19:54:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/"},"wordCount":1574,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png","articleSection":["Couchbase Lite"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","url":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","name":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png","datePublished":"2026-06-04T19:54:12+00:00","dateModified":"2026-06-04T19:54:13+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/COU_1490-Blog-Image-A-EDITORIAL-ONLY-I-Built-an-Offline-Kahoot-Clone.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a5479b7c0b1e18e90b26eb1c23614247","name":"Pulkit Midha - Developer Evangelist","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g3d93c973517960a7fdfc174e5ccac893","url":"https:\/\/secure.gravatar.com\/avatar\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7d4ef7136748d447a5097d3ff8e83c5f44f5d09c3ace4e27bd0ce09ff9327fca?s=96&d=mm&r=g","caption":"Pulkit Midha - Developer Evangelist"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/pulkitmidha\/"}]}},"acf":[],"authors":[{"term_id":1002,"user_id":85668,"is_guest":0,"slug":"pulkitmidha","display_name":"Pulkit Midha - Developer Evangelist","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/pulkit-midha-couchbase-1.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/pulkit-midha-couchbase-1.png"},"author_category":"1","first_name":"Pulkit","last_name":"Midha - Developer Evangelist","user_url":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85668"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=5453"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5453\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/5460"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=5453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=5453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=5453"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=5453"}],"curies":[{"name":"\u00a1Bien jugado!","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}