A Java Quake 3 discovery client and testing the existing implementation
Since I got a Quake 3 server, master server and client working I have written my own Java client which speaks Quake 3 discovery protocol. Doing this meant that I had to learn the procedure for Quake 3 server discovery and the format of the messages used by the system.
The basic process is Quake 3 servers register themselves with a known master server, the Quake client then asks the master server for a list of all registered servers and then the client queries each server in turn asking for its current state (what map it’s playing, etc).
This is documented on the Interweb in reasonable detail but having access to the Quake 3 source means you can see how John Carmack implemented it. I now have generic code for sending UDP OOB messages (what Quake 3 uses for this kind of communication) and have written code for parsing responses (basically hacking up a Byte array and converting from some C data types to Java).
I then wrote a client which will measure the time to query a master server and the total time to query each game server it finds. During Wednesday night and some of Thursday I used this to benchmark the existing Quake 3 master server/ game server implementations. I ran up to 190 game servers on 7 nodes of our cluster (so 27 Quake 3 servers per compute node) with a master server on the other compute node and my test client on Holly.
I will use the graphs of the results of these tests to help me pick what to reimplement using Tycho. I intend to pick the brains of everyone in the DSG tomorrow so make sure you have your Ready Brek.