The Universal Game-Find Server
Disclaimer: I am writing this article under the assumption that noone else has written one like it; I certainly have not found one. With all the people writing games today, I'm certain the wheel has been re-invented many times over, so please e-mail me if you find another article exactly like this.
When I was writing Cycles3D, I realized I needed a game-find server. In haste, I wrote a server executable that ran from my own computer, but that didn't last long. It was buggy, and when I graduated from college, I lost my dedicated connection. I got back to it later on -- thinking at the conceptual level, that is. I wanted something generic that would run with all my future games, and adopted the idea of a generic game-find server that worked with a paradigm that is parallel to that of a DNS server, only the "domain names" would resolve to the IP addresses of games in progress. While discussing it in a programming chat room, it was suggested that I actually use a DNS server to do it. Putting the two together, the idea of the GNS: Game Name System server, was born.
What is DNS?
Figure 1: A graphical representation of a DNS server hierarchy.
Servers on the internet are assigned names according to the Domain Name System. Each server has a special name that consists of alpha-numeric characters seperated by periods. Every part of the name represents a part in a hierarchy of servers. For example: with clubs.yahoo.com, the top-level domain is com, the next level is yahoo, and the last level is clubs. When you want to go to clubs.yahoo.com, your computer first communicates with the com server, which directs your computer to the yahoo server, which directs you to the clubs server. At that point, you get the IP address of clubs.yahoo.com, and then you connect to it with your browser.
You'll notice that some of the shapes in the picture are doubled. This represents the fact that for every complete domain name, there can be more than one DNS server at each level. The com level server, for example, has many mirrors, because it would not make sense that every computer in the world on the internet resolve IP addresses through the same server. Imagine the traffic and resource usage it would take!!
What is GNS?
Figure 2: A graphical representation of a GNS server hierarchy.
A GNS server is a superset of the DNS server. It has all the code functionality a typical DNS server does. If you want to find Steve's Unreal Team Fortress game, you would have to resolve the name
to the IP address of his computer.
The top-level domains in the GNS are not com or org like with DNS, but rather, can be the names of video games: Quake, Unreal, or Cycles3D. The lower level domains could be a variety of things, depending on the game. For popular 3D shooters, they could be a hierarchy that goes from add-on, to version, to third-party servers like Awesomegamenet (which is non-existent as far as I know) or BattleNet. Who says this has to be written in stone, however? The top-level domains could in fact be the BattleNet's and GameSpy's of our day, while game names appear at lower levels. The point I'm trying to make here is that the concept of DNS may not only apply to finding websites, but also, to finding video games.
I said earlier that the GNS server is a superset of the DNS server...what more could it do than just resolve names to IP addresses? Well, let's be creative for a moment. Who says they have to just point to games? Why not rankings, too? Obviously, clan servers would have to join the hierarchy...and game statistics (like player count and frags) may not only be retrieved from one specific game, but to all the games in a specific sub-domain.
I know what you're thinking: "Who is this guy? Why doesn't he get with the times, and use GameSpy? We already have all the technology we need to find people and games over the Internet!" Well, you're absolutely correct. I do not know; however, how GameSpy works. Maybe it already works this way (in which case I hide behind my disclaimer). Still, I think that the development of a client and server side package for this concept would be a great help to small time developers or individuals who can write video games, but don't want to invest a great deal of time in this particular aspect of their games. The best part is, 90% of the GNS package has already been programmed by those who write DNS servers and clients! Now lets see if we can get them to release their source code so we can finish the other 10% :).