Search code examples
xnanetwork-protocolsreal-timeprotocol-buffers

Available Game network protocol definition languages and code generation


I've been looking for a good general purpose binary network protocol definition framework to provide a way to write real-time game servers and clients (think World Of Warcraft or Quake III) in multiple languages (e.g. Java backend server and iPhone front-end client written in Objective-C and Cocoa).

I want to support Java Flash clients, iPhone clients and C# clients on windows (and XNA clients on XBOX).

I'm looking for a way to efficiently send/receive messages over a TCP/IP or UDP socket stream connection. I'm not looking for something that can be sent over an HTTP Web Service, like JSON or XML marshalled Objects. Although Hessian's binary web service protocol is a very interesting solution

I want a network protocol format and client/server basic implementation that will allow a client to connect to a server and send any message in the defined protocol and receive any message in the protocol without having to bind to some kind of RPC endpoint. I want a generic stream of any message in my protocol incoming and outgoing. This is so that I can support things like the server sending all clients the positions of various entities in the game every 100 milliseconds.


Solution

  • The network protocol frameworks I've found are as follows:

    1. Google's Protocol Buffer - but it lacks support for things like sending/receiving arbitrary messages from your given protocol.
    2. Apache Thrift - an interesting option but it is geared mainly towards RPC instead of generic game client/server socket type connections where the client or server can send messages at any time and not just in response to a client RPC request.
    3. Raknet Multiplayer - Raknet provides full multiplayer network library (it's free for indie development with revenue under $250k)

    UPDATE : OculusVR Acquired RakNet and its Free/OpenSource now. U can find it on Github

    1. Hessian Binary Web Service Protocol - is a HTTP web service binary protocol, it is well-suited to sending binary data without any need to extend the protocol with attachments.

    Raknet provides a good game/simulation oriented multiplayer library.

    Apache Thrift and Google's protocol buffers seem to be the simplest approaches to using in a game network protocol client/server architecture.

    Hessian seems like a great fit if you want to create a web based game server with a Java or flash client using some type of server push technology like COMET. Hessian might provide a really interesting way to support real-time games on the web and even be able to host them on VM web solutions like Google's App engine or Amazon's EC2.

    There's some discussion about using various protocol definition frameworks for games and other uses: