Is this a viable architecture for a mmog ?

Started by
39 comments, last by _winterdyne_ 18 years, 4 months ago
Hi all, I have been looking for information about programming a client/server architecture for a mmog, but i have only found bits of information and nothing really concrete. After all this reading i have figured out a possible solution but I'm not really experienced about network programming and possible issues this implementation could suffer. So I ask about your opinion and constructive crits about this implementation, and a little explanation about why it wouldn't work is welcomed, not just 'it wont work sorry!' Here it is: The world is partitioned into squares that will be called 'cells'( original, isn't it? ), they won't be very big so i will need thousands to fill the world. An array of cells will be called 'Zone'( :) ). Each zone is controlled by a server. Cells can be passed to another server if it's needed to balance the network. In the client side we check wich cells are visible and a request of the information available in the visible cells is sent ( players, npcs, etc. ). Information from various servers at the same time will be required if the player is viewing cells from various servers. The client side will have the cell 'topology' so it can check the cell visibility itself but it won't know wich server owns this cell so i think a master server with information about what server owns each cell will be needed. I would really like to skip this master server but i cant figure how the client will know which server owns a specific cell, because cells can be passed from server to server, with some restrictions. Well it's long enough, I hope it's not the dumbest post in the forum story, as I said before I have never tried such a thing. I'm awaiting your comments, Thanks!
Advertisement
The client should not decide which cells are visible. The server should. This stops someone hacking your client and requesting info on the whole game world.

Other than that, you've got a pretty standard spatial partitioning zone model there.

I cover a lot of this in some of the threads I've posted on this forum. Your servers need to be aware of each other. Since they are usually colocated on a fast lan, intra server traffic is not too scary, providing not too much goes on at server boundaries. If you're not too experienced with the network programming, I'd advise working on a single zone principle at the moment, and use your framework for batching events. Later on, add the inter-server traffic.


Winterdyne Solutions Ltd is recruiting - this thread for details!
Thanks winterdyne,

I'm going to read your posts after writing this one.
Don't you think that calculate cell visibility in the server will overload it ?
Of course i will not check the player frustum with every single cell in the world, it will be optimized, but i'm a bit afraid about overloading the server, i want to support as many players as possible.
IMO, its all about the scalablity of your architecture. You want to make it such that adding more servers to the world cluster will improve the performance... I dont think you can have a "massive" mog on a single-server.
You say that 'zones' are made up of several cells, then go on to say that cells can be passed to different servers. It would probably be best to pass the whole zone instead. I also second the scalability comment, you should design your back-end programming so that you can load your software on the computer, connect it to the network, and have it communicate with the other servers and not have to do anything more than that.
Quote:Original post by Steadtler
IMO, its all about the scalablity of your architecture. You want to make it such that adding more servers to the world cluster will improve the performance... I dont think you can have a "massive" mog on a single-server.


I agree that you can't have a massive game on a single server, but if one single server can handle 500 players instead of 300 then the network needed is much smaller and a big improvement.

Quote:Original post by I_Smell_Tuna
It would probably be best to pass the whole zone instead.


I think i didn't explained the concept well, each zone is controlled by a server, then passing a zone is like passing the whole server. What would be wise is pass an array of 10x10 cells, for example, instead of single cells.


While writing this post i think i have got a solution for the cell visibility calculation!
Client side will calculate wich cells are visible from the current point of view, then it sends a request to the server to get the data of these cells, the server will only check if this cells are really visible and send the data if it's true. Simple!
Well if your server is going to check to see if the cell is visible anyway why not just have the client send a request for visible cells then have the server reply with a list of visible cells.

Here is a thread with MMO cluster architecture ideas. http://www.gamedev.net/community/forums/topic.asp?topic_id=348831
The client has to determine what cells are visible between the thousands that exist in the game world( as i said it's optimized, not checking each single cell against the frustum ), then send the ID of the visible cells to the server,
and the server only verifies the visibility of requested cells, no more. I think it's faster and doesn't allow cheating.
Procedure is like this:

Client gets the visible cells.
Client send the list of visible cells.
Server checks the cells received, no more.
If list is valid, information of the cells is sent.
Where is the client getting the list of visible cells from?

This topic is closed to new replies.

Advertisement