Fixing the Internet for Real Time Applications (Riot Games, 2015)
League of Legends is not a game of seconds, but of milliseconds. In day-to-day life, two seconds fly by unnoticed—you took two seconds reading that! In-game, however, a two-second stun can feel like an absolute eternity. In any single match of LoL, thousands of decisions made in milliseconds dictate which team scores bragging rights and which settles for “honorable opponent” points.
I'm a network engineer at Riot, and part of the Riot Direct team that’s obsessing over those milliseconds. If the communication between a player's computer and our servers slows, a player can’t make in-game decisions as well—and it’s rough to potentially let your team down because of a connection issue. My team’s mission is to provide the fastest possible connection for players to our game.
This is the first in a three-part series discussing what problems online games face using the commodity internet as their delivery mechanism to players, what Riot’s doing about it, and what the future holds for real-time applications.
In this first post, I’ll dive into how the internet, while an absolutely amazing piece of technology, wasn’t constructed for applications that run in real time. If your web browser issues a GET request to rottentomatoes.com looking for reviews of the latest Bond film, you probably don’t mind waiting a few seconds if afterwards all the relevant information appears. The situation doesn’t exist where a user of rottentomatoes.com absolutely needs a movie review in the next tenth of a second. Yet, when I play League, I’m constantly devouring information I need that quickly.
I’ll also discuss some components of the internet’s construction and what implications those components present. Plus, I’ll dive deeper into the issue illustrated by the rottentomatoes.com example: how online game communications fundamentally differ from those of other applications. Finally, I’ll talk about how the routing hardware of the internet exacerbates this problem of real-time communication.