{"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\/pt\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","title":{"rendered":"Zero-Latency Quizzing: How P2P Replication Solved the Conference Wi-Fi Problem"},"content":{"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 spinners.<\/p>\n\n\n\n<p>This connectivity challenge is a common hurdle at developer meetups and workshops. The irony is hard to miss: when participants are sitting just a few feet apart in the same room, data shouldn&#8217;t have to travel out to a distant cloud server and back just to sync a question across a local group of screens.<\/p>\n\n\n\n<p>So I built KahootP2P. It is a Kahoot-style quiz game for iOS that runs entirely over local peer-to-peer networking. No internet. No router. No cloud. Just devices that talk directly to each other, powered by Couchbase Lite Enterprise&#8217;s P2P replication.<\/p>\n\n\n\n<p>This post shares the motivation behind the project, the architecture decisions involved, and how Couchbase Lite makes the hardest parts surprisingly simple.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-problem-with-cloud-dependent-multiplayer\">The Problem With Cloud-Dependent Multiplayer<\/h2>\n\n\n\n<p>Kahoot is brilliant. The speed-based scoring creates real tension, the simple four-color answer grid works on any screen size, and the leaderboard after each question keeps everyone engaged. But it has a fundamental dependency: every single interaction goes through the internet.<\/p>\n\n\n\n<p>For a classroom with dedicated Wi-Fi, a cloud-reliant approach works perfectly. However, in a packed conference hall where 200 people are sharing the same network, that centralized connection model can quickly lead to severe latency and connectivity drops.<\/p>\n\n\n\n<p>Latency also matters. Kahoot awards more points for faster answers. When your correct answer takes 800ms to reach the server instead of 200ms because of network congestion, you are literally losing points through no fault of your own. That is not a great experience.<\/p>\n\n\n\n<p>The goal, therefore, was to achieve network latency measured in single-digit milliseconds, not hundreds. The only way to get there was to cute out the internet entirely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-couchbase-lite-p2p\">Why Couchbase Lite P2P?<\/h2>\n\n\n\n<p>In terms of offline multiplayer experience, Apple&#8217;s MultipeerConnectivity framework handles discovery and basic message passing between iOS devices. But there&#8217;s a catch: it is designed&nbsp; for mesh topologies where every device talks to every other device. For a quiz game with a host that controls the flow, this creates challenges around consistency and ordering.<\/p>\n\n\n\n<p>The most important parameters include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A single source of truth \u2013<\/strong> The host device should be the authority on scores, question timing, and game state<\/li>\n\n\n\n<li><strong>Automatic data sync \u2013<\/strong> When the host writes a new question or updates scores, every player should see it without me manually serializing and routing messages<\/li>\n\n\n\n<li><strong>Reliable delivery \u2013<\/strong> If a player&#8217;s answer takes a moment to sync, it should not get lost<\/li>\n<\/ul>\n\n\n\n<p>Couchbase Lite Enterprise&#8217;s peer-to-peer replication fits this perfectly.&nbsp;<\/p>\n\n\n\n<p>The URLEndpointListener lets one device (the host) act as a replication target. Player devices connect to it using a standard Couchbase Lite replicator in push-and-pull mode. This gives a star topology with the host at the center \u2013 exactly what a host-authoritative game needs.<\/p>\n\n\n\n<p>The key insight is that there is no need to build a custom message protocol at all. Instead of thinking in terms of &#8220;send questions to all players&#8221; and &#8220;receive answers from player 3,&#8221; documents are simply written to the local database, while the replication layer handles delivering them to the right places.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-architecture-documents-as-game-state\">Architecture: Documents as Game State<\/h2>\n\n\n\n<p>The entire game state lives in Couchbase Lite documents. Here\u2019s how it is modeled:<strong>Game \u2013<\/strong> A single document that tracks the game title, join code, phase (lobby\/asking\/closed\/finished), and question count. When the host changes the phase, replication pushes it to all players.<\/p>\n\n\n\n<p><strong>Game \u2013<\/strong> A single document that tracks the game title, join code, phase (lobby\/asking\/closed\/finished), and question count. When the host changes the phase, replication pushes it to all players.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Game: Codable, Identifiable {\n    @DocumentID var id: String?\n    var title: String\n    var joinCode: String\n    var phase: GamePhase\n    var questionCount: Int\n    var createdAt: Date\n}\nfunc sta<\/code><\/pre>\n\n\n\n<p><strong>QuestionState \u2013<\/strong> One document that tells every player what question they are on and whether it is still open for answers. The host updates this document to advance the game.<\/p>\n\n\n\n<p><strong>Questions \u2013<\/strong> Individual documents for each question, synced from host to players when the game starts.<\/p>\n\n\n\n<p><strong>Answers \u2013<\/strong> Each player writes their answer as a document. The replication pushes it to the host for scoring.<\/p>\n\n\n\n<p><strong>AnswerResults \u2013<\/strong> After scoring, the host writes result documents back, which replicate to the relevant player.<\/p>\n\n\n\n<p><strong>Leaderboard \u2013 <\/strong>&nbsp;A single document with ranked entries, updated by the host after each question.<\/p>\n\n\n\n<p>The beauty of this approach is that the sync is bidirectional and automatic. Players push answers up, the host pushes results down, and Couchbase Lite handles all the conflict resolution and ordering.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Discovery: Finding Games Without a Server<\/h2>\n\n\n\n<p>Before devices can replicate data, they need to find each other. Bonjour (Apple&#8217;s zero-configuration networking protocol) is used for this.<\/p>\n\n\n\n<p>When the host starts a game, two things happen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A URLEndpointListener starts on an available port.<\/li>\n\n\n\n<li>A Bonjour service is published advertising that port.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>rtHosting(gameId: String) throws {\n    var listenerConfig = URLEndpointListenerConfiguration(\n        collections: &#091;collection]\n    )\n    listenerConfig.port = 0  \/\/ Let the OS pick a port\n    listenerConfig.disableTLS = true\n\n    let urlListener = URLEndpointListener(config: listenerConfig)\n    try urlListener.start()\n\n    \/\/ Advertise via Bonjour so players can find us\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>On the player side, a NetServiceBrowser scans for the _quizblitz._tcp. service type. When it finds a game, the player taps to join, and a Couchbase Lite replicator connects to the host&#8217;s URLEndpointListener:<\/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: &#091;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>That\u2019s it. Once the replicator is running, documents flow automatically in both directions. No manual message handling.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scoring: Speed Matters<\/h2>\n\n\n\n<p>Like Kahoot, faster correct answers earn more points. But here is the tricky part \u2013 in a P2P setup, you can\u2019t simply use wall-clock timestamps because devices might not have synchronized clocks (and without the internet, there is no NTP server to sync with).<\/p>\n\n\n\n<p>This solution uses the host&#8217;s monotonic clock (via mach_continuous_time) as the single timing reference. When the host opens a question, it records its own uptime in nanoseconds. When an answer document replicates to the host, the host records the receipt time.<\/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>Is this perfectly fair? No. The replication latency adds a few milliseconds of noise. But in practice, over local Wi-Fi, the replication lag is under 50ms. For a game where the time limit is 15 seconds, that delay is negligible. The person who knows the answer and taps faster will still win.<\/p>\n\n\n\n<p>The scoring works on a sliding scale: answer instantly and get 1000 points. Answer at the very last second and get 100 points. Answer wrong and get zero. This creates the same urgency you feel in Kahoot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reactive UI with Combine<\/h2>\n\n\n\n<p>The UI needs to update in real time as documents change. Couchbase Lite&#8217;s Combine integration makes this clean:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.collectionChangePublisher()\n    .receive(on: DispatchQueue.main)\n    .sink { &#091;weak self] change in\n        self?.handleCollectionChange(change)\n    }\n    .store(in: &amp;cancellables)<\/code><\/pre>\n\n\n\n<p>When any document in the collection changes \u2013&nbsp; whether from local writes or incoming replication \u2013 this publisher fires. The handler checks if the change is relevant (same game ID) and updates the appropriate state: new player joined, answer received, leaderboard updated.<\/p>\n\n\n\n<p>On the SwiftUI side, the engines are ObservableObject classes with @Published properties. When the host writes a new QuestionState document and it replicates to a player, the player&#8217;s ClientEngine picks up the change through the collection publisher, updates its @Published properties, and SwiftUI re-renders the view. The whole chain from &#8220;host presses Next Question&#8221; to &#8220;player sees the new question&#8221; takes under 100ms on a local network.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Codable Integration<\/h2>\n\n\n\n<p>One of the things that made development faster was Couchbase Lite&#8217;s Codable support. Instead of manually mapping between documents and Swift objects, models could simply be defined as as Codable classes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Save a model directly\ntry collection.save(from: game)\n\n\/\/ Load it back as a typed object\nlet game = try collection.document(id: docId, as: Game.self)<\/code><\/pre>\n\n\n\n<p>The @DocumentID property wrapper automatically maps the Couchbase Lite document ID to a property on the model. This makes it possible to work with normal Swift objects everywhere and lets the SDK handle serialization automatically.<\/p>\n\n\n\n<p>For queries, I used 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\">Key Takeaways<\/h2>\n\n\n\n<p>Documents as game state work surprisingly well. There was initial skepticism about using a database replication protocol for real-time game sync. In practice, the latency is low enough that it feels instant, and you get reliable delivery, conflict resolution, and persistence for free.<\/p>\n\n\n\n<p>Star topology is the right call for authoritative games. A mesh network sounds cool, but when one device needs to be the authority on scoring and game flow, a hub-and-spoke model with the host at the center is simpler and more predictable.<\/p>\n\n\n\n<p>You do not need the internet for most local multiplayer. This might seem obvious, but it is easy to default to &#8220;spin up a server&#8221; when the devices you want to connect are literally in the same room. Couchbase Lite&#8217;s P2P replication eliminates that entire dependency.<\/p>\n\n\n\n<p>Bonjour discovery just works. Bonjour on iOS is rock solid. Devices find each other within 1-2 seconds consistently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Try It<\/h2>\n\n\n\n<p>The full source code is on GitHub: <a href=\"http:\/\/github.com\/midopooler\/KahootP2P\">github.com\/midopooler\/KahootP2P<\/a><\/p>\n\n\n\n<p>You will need Couchbase Lite Enterprise (for the URLEndpointListener) and two or more iOS devices on the same local network. Simply clone the repo, run xcodegen generate, build, and you are playing within a minute.<\/p>\n\n\n\n<p>If you are building any kind of local multiplayer, collaborative, or offline-first experience on mobile, Couchbase Lite&#8217;s P2P capabilities are worth considering. It eliminates the need to write a single line of networking code beyond &#8220;start the listener&#8221; and &#8220;start the replicator,&#8221; which saves a significant amount of time.<\/p>\n\n\n\n<p>The game is simple, but the pattern applies much more than quizzes, including field data collection with team sync, collaborative note-taking in airplane mode, and point-of-sale systems that keep working when the internet drops. Any time you need multiple devices to share state without depending on the cloud, this same architecture works.<\/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,"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 v27.6 (Yoast SEO v27.6) - 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\/pt\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\\\/pt\\\/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\/pt\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/zero-latency-quizzing-how-p2p-replication-solved-the-conference-wi-fi-problem\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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\/pt\/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"},"0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/85668"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=5453"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5453\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/5460"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=5453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5453"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}