Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

amqp or xmpp for real time online games

Which of these technology suite for Multi user online game project?

Project requirements:

  1. Able to handle 2k-5k user at any given time.
  2. client library for iphone and android (native, no javascript).
  3. client library for Microsoft Windows (most important), also for mac os x and linux.
  4. Good documentation specially for mod development
  5. Project is not open-source. So, can only use libraries with suitable license.

I can program in erlang and java as well, programming language isn't an issue.

I was looking at following server technologies like Openfire, Tigase, ejabberd and RabbitMQ. All are good for my project but I want to know more about what suite my needs, AMQP or XMPP.

What AMQP offer specially for real time online games. Is it better option then xmpp?

like image 308
user381930 Avatar asked Jul 02 '10 10:07

user381930


3 Answers

The people of Linden Labs (Second Life) made a thorough comparison of a lot of messaging systems that you should read:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes

For what is worth, I'm using zeromq in a project and it's really interesting because ,depending on the use case, you don't need a broker node.

like image 145
itorres Avatar answered Oct 07 '22 18:10

itorres


A key difference between XMPP and AMQP is binary content. AMQP handles binary data just fine, and XMPP seems more designed for XML. Personally for online games I use Google Protocol Buffers for message formatting and parsing, and with their very small binary footprint, I'd be more inclined to use AMQP to deliver those messages.

But do consider what AMQP server you want to use. I've been bitten by using RabbitMQ for my AMQP server in the past. RabbitMQ does not have any flow control facilities, at all. So if your clients are sending messages faster than your server can consume them, buffers on the server can fill up and blow the server up. More recent versions of RabbitMQ implement flow control in an exceedingly coarse way: they halt all consumers in the system until memory clears up.

I've never tried zeromq; perhaps it'd be better for the things I've been using RabbitMQ for...

like image 38
Unoti Avatar answered Nov 16 '22 09:11

Unoti


5K users doesn't tell me much about their behaviour, but if they all submited one request within the same 10 second window then let's say you'd be looking in the 500-1000 requests per second.

I've had Active/MQ running on my relatively low-powered lap-top easily handling 300 requests per second and so I'd happily recommend it here. You can also set up clusters of brokers and achieve horizontal scalability. You can use an http protocol (STOMP) or its native binary protocol. Lots of client API libraries also for C/C++, Java, JavaScript and others. There is some initial AMQP support.

You didn't mention any persistence requirement, but again I would have thought that most RDBMSs would suffice. That said, some of the document oriented and big-table type databases look interesting from a horizontal scaling perspective.

I've also found Apache Camel highly performant and I strongly recommend it. Camel is used to implement your logic layer.

like image 5
Christopher Hunt Avatar answered Nov 16 '22 08:11

Christopher Hunt