Advertisement

MMO server architecture choice

Started by March 28, 2006 08:41 AM
14 comments, last by hplus0603 18 years, 10 months ago
There is one complete mmo open-source client and server system out there which has been used for a commercial game (ryzom).
Engine (set of libraries) is called Nel (www.nevrax.org).
Take a look at it, you can learn a lot and have a good network layer.
Its a huge code base, but thats the deal with mmo's.

I used it a couple of years ago for a mmo demo I coded, including writing a set of services etc.
If my memory does not fail, I remeber that it used 1 world n servers.
Or rather.. you have one or more "front-ends" (request routers) and customnameserver.
Then you have x numbers of "services", which are exe's providing a specific service and handles a specific set of commands. For example a positioning service or a chat service.
These service can be distributed over one or several machine.

So a service only has to know the main gateway/custom nameserver, then it tells it that it's alive and who it is and the gateway broadcasts this etc. And later the router knows where to route these kinds of calls.

It's in general a good filosfy, since you can start of with a couple of sevrers and easaly grow by separating out the most loaded/intensive services to one or more separate machines.
I ran it successfully with about 10 services distributed over two machines + a separate machine runnign an mysql server and php/apache front for login etc.

I think it also had software fail-over mechnism (in the router/gateway/nameserver) etc.

Well.. it was a while ago.. check it out.

/martin
The ticket lifetime really only matters if you disconnect unexpectedly. For a regular "logout" you could send a message to the server that you're logging out, which would invalidate the ticket on the server. This requires a "ticket id" as part of the ticket, of course. You could also include things like the source IP address in the ticket, to avoid spoofing from other machines.

If you're worried about a technically savvy little brother (who knows enough to bypass the client-side login screen), then I wouldn't write the ticket to disk; just keep it in memory while the client is still running. That way, you can re-connect to the servers at will while you're still "logged in" in the client process, but once you quit, the ticket is gone. (Unless someone can fish it back from the page file ;-)
enum Bool { True, False, FileNotFound };

This topic is closed to new replies.

Advertisement