MMORPG networking noob questions

Hello! My background is in full stack dev with .NET, SQL, MySQL, IIS, Azure and AWS/EC2, but I have never done a game or game networking before. I’m intending to make an MMORPG scaled for many hundreds of players, or a few thousand (I’m not crazy enough to think in the millions).

Do you folks have any basic, practical guidance for me?

Ignoring all the other components for player accounts etc for the sake of discussion, one way of doing it might be: -

  1. Client game graphics/sound/behaviours
  2. Adding streamed terrain coming from a “dumb” cloud service
  3. Adding multiplayer via new authoritative game server (as a headless version of the client?)

Or should I have my server technology from the very start before I’ve even got a default skybox saved? Can I have server clustering or other scale options?

Obviously, I have waay too many questions here, and I will need a team to realise the vision.

What worked for you? What doesn’t work? Ignore my specific questions and just rant about networking? I am all ears! :slight_smile:

As a .NET developer you will be happy to see that a Stride project is just a visual studio solution. Game Studio is just a view on it.

So you can use any technology supported by .NET that you want. Nuget, Azure, whatever…

So you can pick the best libraries out there and combine them as you please.

You should find plenty of conceptual information about state synchronization when you search for it. The same concepts apply here.

Somewhere on GitHub is a headless Stride project, that might get you started as the server. And many people use lidgren as networking library. But there are alternatives.

1 Like

So, what you are trying to do is not crazy at all. What you want to do is create an authoritative server. You can create a client in Stride and get state information from the server. You may want to look into UDP for messaging so your client can handle some dropped packets.
There are a few MMO server frameworks out there if you know where to look. Here is one that I can’t speak to as far as it’s capability or architecture, but it looks reasonably well built. GitHub - kebiao/kbengine: A MMOG engine of server.
There are others, like this one built as an open source project by the Star Wars Galaxies gaming community. SWGEMU · GitHub
Since that was reverse engineered to work with a major MMO game and has been tested with servers running thousands of players at a time, I’d put more stock in it’s maturity and stability.
The thing is that you really want a separate server to handle game state. Not only to keep players from cheating (though that is important too), but also because the game engines tend to try to keep track of too many things in too much detail, and the up time for (for example) the Unreal Engine multiplayer server is closer to hours than days, and that is one of the best game engines out there (for a good MMO, you want a server that can run for weeks).
The key things that you will need to figure out are how to get around seamless transition from one “zone” to the next (probably by engineering player choke points), how you are going to seamlessly move player data from one server to the next, and how to optimize your zones to allow for reasonable performance and still have a decent playing area. As I said earlier, Stride works fine for building the client, but you will want a specialized and dedicated server on the back end.

2 Likes

Thank you. I haven’t written a line of code yet - still doing tutorials, research and scoping, so keep it coming :).

Regarding the server, it sounds like my server will manage state of the world/game. It would use project references into the Stride codebase for players/object classes, and it would sanity-checking requests without actually running the Stride engine or simulating terrain and physics. Is that right?

In that scenario, I feel like I would have another server, say, simulating monsters, that makes requests to the state server to about monster movement and actions?

About my crazy…, my intention is to run an entire little planet. Your mention of Zones reminded me of my recent research that included watching the TV documentary about World of Warcraft. I wouldn’t want zones like I saw there. It would instead be everyone in together. I’ve got a (possibly genius, possibly naïve) idea how to do that :smiley: but it all starts with one dedicated server managing one playing client’s experience.

I’ve just discovered Microsoft PlayFab.

Azure PlayFab documentation - PlayFab | Microsoft Docs

What you may want to do is divide the simulation work between your server and Stride. Stride can do (say) ragdoll physics simulation for the PC character, while the server controlls the actual game location. That way players can see immediate response, but they can’t hack their game client to cheat in a game altering way. There are a lot of flashy stuff and animations that are usually run on the client, but they aren’t the things used to determine winners in combat, for example.

2 Likes