<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Real-Time - Tag - Misael Zapata</title><link>https://misael.org/tags/real-time/</link><description>Real-Time - Tag - Misael Zapata</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Fri, 14 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://misael.org/tags/real-time/" rel="self" type="application/rss+xml"/><item><title>Bytes Over the Wire: How agar.io Stays Fast</title><link>https://misael.org/bytes-over-the-wire-io-games/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><author><name>Misael Zapata</name></author><guid>https://misael.org/bytes-over-the-wire-io-games/</guid><description><![CDATA[<div class="featured-image">
                <img src="/bytes-over-the-wire-io-games/images/cover.png" referrerpolicy="no-referrer">
            </div>Open devtools on agar.io and the Network tab is eerily still: no polling, no JSON endpoint, just one WebSocket handing you columns of hex. This is what those bytes say. One-byte opcodes whose meaning flips depending on which direction they&rsquo;re travelling, a node record with every field at a fixed offset and not a character of it spelling out &lsquo;x&rsquo;, little-endian everywhere with a DataView gotcha that folds a whole frame into a diagonal smear, and the decision that matters most: the server holds the entire world and ships each player only their sector, so the packet scales with a screen instead of with the population. Years ago I hit the same wall with a Tornado server and JSON, and a fire took the code before I could brag about the fix.]]></description></item></channel></rss>