Jump to content
  • Advertisement
Sign in to follow this  
beebs1

Server Architecture

This topic is 2617 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hiya,

I'm building authentication for a 'massively' multiplayer game as part of my university dissertation, to demonstrate some technical security features. The system I've come up with seems fairly common - a small number of gateway processes to accept connections, authenticate players and then pass through traffic - probably checking for key messages such as changing zone, leaving the game, etc. In addition, there are a number of individual game worlds, split into several zones each. There is no inter-zone interaction beyond changing zones, and I'm not building any complex game mechanics into the system.

I've made a simple deployment diagram here in case anyone would like to see.

I'm having difficulties with inter-process communication - the gateway processes will need to know which worlds/zones are available, and detect when these processes go down. ApochPiQ helpfully pointed me towards using a single central authority process, which maintains a connection with each other process. This seems like a good idea, and I had some questions I was wondering if anyone can help with.

Where should the central authority process 'sit' in the diagram?

Most likely as its own process? Ideally I'd like the possibility of several gateways, so making it part of the gateway would mean multiply authorities and headaches.

How should the central authority 'discover' the other processes when they start up, or vice-versa?

Maybe some kind of ping mechanism using a UDP broadcast, after which the TCP connection is made? Or the authority is hard-coded into a configuration file for each process?

Should processes communicate between themselves directly, or through the central authority?

Going through the authority seems sensible in some cases. For example, if a gateway wants a list of characters a particular player has in a world it can ask the authority, which in turn queries that world database.

Changing zones is more complex - the player, gateway and the new zone need to be informed. Possibly the authority can inform the gateway and new zone, after which notification is sent to the player.

It might be simpler for each world to have its own gateway(s) - which are not shared.


Any suggestions are very much appreciated! :)

Share this post


Link to post
Share on other sites
Advertisement

I'm having difficulties with inter-process communication - the gateway processes will need to know which worlds/zones are available, and detect when these processes go down. ApochPiQ helpfully pointed me towards using a single central authority process, which maintains a connection with each other process. This seems like a good idea, and I had some questions I was wondering if anyone can help with.


I recommend looking into Apache ZooKeeper. It solves this problem.



Should processes communicate between themselves directly, or through the central authority?
[/quote]

If you centralize communication, it will become a bottleneck, and if it crashes, everything's down. The authority of "where things live" and "what's currently available" is not needed once a connection is established, so your system is more resilient if communication doesn't depend on that.


Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!