MMO Server Design

Started by
3 comments, last by kvp 17 years, 5 months ago
hi all i'm designing a server architecture for a mmo game. i also started with implementing some network code. i user three different server types: Account Server: on this server there are all account informations for all players in the game. informations like account name & password, how much characters on which realm,..., is stored on this server. a player may have different characters on the same account. Realm Server (storing): this server saves all informations for a character on a specific realm, such as curren position, inventary, skills,... there exists only one realm server per realm. Zone Server (game play): there may be many zone servers. each zone of the world is splittet on zone servers. on this server the game logic is proceeded such as enemyes and mobs, other players in the same zone,... if the player comes at the boundaries of the world, the player is automatically swaped on the adjanced zone server. workflow: a player logs on to the account server. then he creates or selects a character on a specific realm. the client connects to the current zone server and the zone server connects to the realm server. so the game interaction starts betwen the client and zone server. the zone server stores every information on the realm server. there is only one realm server, so you can have a lot of zone servers with the game logic, but the storage is still on one server. what do you think about this architecture? are there possible improvements or maybe some problems. any answer would be appreciated. ps: sorry for the bad english...
------------------------<< deltasoft games >>Homepage: http://www.deltasoftgames.ch
Advertisement
Your approach would work fine, but this is what I've seen (from MMOs like WOW, etc).

Login Server - First server you make a connection with; validates account information passed to it via a database connection, if account is valid, tells client to make a connection with Realm Server.

Realm Server - Only job of this server is to keep track of active World Servers. If a World Server does not send a "heart-beat" to this server on a given interval it will be marked as offline.

World Server - Manages the game world (note, there can be more than one world server which communicate and perform load balancing).

One thing I'd suggest you look into is ReplicaNet (www.replicanet.com) -- They provide a very solid networking engine and awesome support. Just a thought :)


Regards,

Nate Strandberg

PS: I'm working on a persistent world toolkit, if you're interested in learning more, feel free to send me an email at nstrg AT 1242studios.net or contact me on MSN Messenger at nstrg AT hot mail dot com.
"Always forgive your enemies, nothing annoys them more.."
thank's for the answer.

my problem was the storing of the player on the server. if i use several servers for the zone, i have to store the character stuff somewhere. if i store the data on the zone server, i have the same data on each zone server, and only the current zone server has the actual character infos. so i must synchronize the data between each zone server. so, i changed the design, to have a realm server (or store server) who is unique for the realm. every character stuff is stored on the realm server. the only draw-back is, if i want informations from the realm server, i have to communicate with the zone server. the zone server then communicates with the realm server and does a request. one idea is to have two connections from the client: one to the realm server and one to the zone server, but i dont know if this is a usual way to do distributed server systems.

thanks for the replicaNet, i'll have a look. at the moment, i'm working with the RakNet lib and it works fine (but no idea how the lib will handle the data by many players)
sorry, the above post is mine, i forgot to login...
------------------------<< deltasoft games >>Homepage: http://www.deltasoftgames.ch
Quote:Original post by Anonymous Poster
my problem was the storing of the player on the server. if i use several servers for the zone, i have to store the character stuff somewhere. if i store the data on the zone server, i have the same data on each zone server, and only the current zone server has the actual character infos. so i must synchronize the data between each zone server. so, i changed the design, to have a realm server (or store server) who is unique for the realm. every character stuff is stored on the realm server. the only draw-back is, if i want informations from the realm server, i have to communicate with the zone server. the zone server then communicates with the realm server and does a request. one idea is to have two connections from the client: one to the realm server and one to the zone server, but i dont know if this is a usual way to do distributed server systems.


What you call the realm server is called the database server, and clients should not contact it or even see it. Otherwise everyone could give itself any item or amount of money by hacking the client. The rule is that the clients can only see the login server and the zone servers. The database and on pay mmos the accounting server should be hidden behind the first two. This results in a cleaner and safer game design. Also the zone servers might need data from the database, without interacting with the client. The zone server (also called server side game logic) should also have to be able to cache some often used data (like player statistics, inventory), so the database doesn't have to work that much.

However I have designed a slightly different architecture:
-game servers: clients connect to them, they act as login servers and contain the per player game logic (inventory control, crafting, item and equipment rules)
-zone servers: game servers connect to them, they manage the zones the player can roam (they simulate the game world, process movement and combat events)
-ai servers: npcs run on this, they could see the game world as any client connected to a game server (the same rules apply to them too)
-database servers: game, zone and ai servers connect to them, they store any persistent data (no processing, just distributed storage)
-accounting server (stores financial data and private account info, must be heavily protected from even the other servers)

This topic is closed to new replies.

Advertisement