How to host a MMORPG?

Started by
46 comments, last by Toolmaker 16 years, 3 months ago
The real question(which I've missed till so far) is: How far are you in development of said MMO? Are you still in the planning phase? Or did you actually get some development done? If yes, what do you have currently? Just models? Or an actual client/server environment?

If you're just starting out, you currently have enough for an old PC which can run as server and at least 1MBit of upload. You should be able to host ~32 players on a 1MBit line. If not, you made quite some bad decisions on designing the protocol. Esp. in the start phase of your project, don't count on more than 32 people on line at the same time, and these people will mostly come in, check what the game looks like and leave.

Don't make the standard mistakes of many MMOs: Don't announce the game when you basically only can walk around in-game and chat.

Until you have a solid game to show off(ie, more than 1 map, 1 weapon of each class and more than 1 outfit and at least 10+ quests), you don't need a website. If you're up to a point where you think you can start attracting people because the game is solid and has enough to offer, then you start thinking about a website and external hosting.

Go with a Virtual Server setup, which you should be able to host for $100 a month. Virtual Servers are easy to upgrade in terms of disk space / memory / CPU power. And if a host isn't sufficient, you zip up the virtual server, and move it to a different host. Unzip and start back up.

For the website: You could run it on the same server. Simple to setup if you're capable of installing Apache on the OS of your choice.

And out of curiosity: How far are you with the game?

Toolmaker

Advertisement
May I suggest Amazon's EC2 coupled with SQS? You pay for what you use and can spawn new server instances on the fly. I'm pretty sure they have a fat pipe too.
The client is completely done but the server is only a winsocket console application sending a few bytes of data from an array because I'm not sure I'm making it right... I think the only way I can do this is to make the server work on all operating systems because I have no idea what type of server it's going to be on. so I have 2 things that I need to fix if its to work on every operating system that I know of...

1. I'm using winsocket it only works on windows. So I need a socket API that works on all platforms.

2. I need a physics engine that works on all platforms and does not need to be installed like PhsyX does.
This is your life, and it's ending one minute at a time. - Fight club
Also let me make it clear how much data is being transmitted. A value telling what type of data is being received, a 3x4 matrix of floats and a DWORD telling which model to display then randomly sends commands like play animation or play sound that is all and the server only gives the objects that are visible to the player. so It's probably allot less then you think. I was just making sure I don't under estimate
This is your life, and it's ending one minute at a time. - Fight club
Quote:Original post by acraig
Quote:Original post by intrest86
Anyways, I don't think our point is getting across. This is a deployment step. The game should be almost done before this is even a consideration. Develop it on a local network, you don't need an ISP to write it.


Rating++

There are also companies out there that are willing to donate resources if you show them that you are a credible group of people. On the indy MMORPG that I am involved with we have never paid for a server or hosting. Granted, we are still working on bring up our concurrent numbers but for now it meets our needs.

( And can't resist a chance to show a screen shot :) )


============
Andrew


Nice to see you got a MMO up and running looks good.
This is your life, and it's ending one minute at a time. - Fight club
Quote:Original post by EmptyVoid
The client is completely done but the server is only a winsocket console application sending a few bytes of data from an array because I'm not sure I'm making it right... I think the only way I can do this is to make the server work on all operating systems because I have no idea what type of server it's going to be on. so I have 2 things that I need to fix if its to work on every operating system that I know of...

1. I'm using winsocket it only works on windows. So I need a socket API that works on all platforms.

2. I need a physics engine that works on all platforms and does not need to be installed like PhsyX does.


In other words: Your game-server is far from being done. WinSock is based on BSD Sockets, and if implemented correctly, the code is perfectly portable across platforms(ie, not using the Asynch socket functionality of Windows).

For Physics, you can go with ODE(http://www.ode.org/). It's open-source and you can compile it directly into your game(Or build it as an DLL / SO).

As for the traffic, I think you're underestimating what you need to send it... You initially need to send the player's map, location, and all outfit data(what is he wearing, inventory, etc.), and from there on, you need to send the updates of the position(Or better, just MoveIn <direction>, StopMovement, etc.). But also when other players join, NPCs / monsters. So the amount of data you think of needing to send is quite underestimated(In terms of what, not in bytes).

Don't bother about this stuff right now. You're at least 1 year away from actually putting something out to the real world.

Toolmaker

Quote:Original post by Toolmaker
Quote:Original post by EmptyVoid
The client is completely done but the server is only a winsocket console application sending a few bytes of data from an array because I'm not sure I'm making it right... I think the only way I can do this is to make the server work on all operating systems because I have no idea what type of server it's going to be on. so I have 2 things that I need to fix if its to work on every operating system that I know of...

1. I'm using winsocket it only works on windows. So I need a socket API that works on all platforms.

2. I need a physics engine that works on all platforms and does not need to be installed like PhsyX does.


In other words: Your game-server is far from being done. WinSock is based on BSD Sockets, and if implemented correctly, the code is perfectly portable across platforms(ie, not using the Asynch socket functionality of Windows).

For Physics, you can go with ODE(http://www.ode.org/). It's open-source and you can compile it directly into your game(Or build it as an DLL / SO).

As for the traffic, I think you're underestimating what you need to send it... You initially need to send the player's map, location, and all outfit data(what is he wearing, inventory, etc.), and from there on, you need to send the updates of the position(Or better, just MoveIn <direction>, StopMovement, etc.). But also when other players join, NPCs / monsters. So the amount of data you think of needing to send is quite underestimated(In terms of what, not in bytes).

Don't bother about this stuff right now. You're at least 1 year away from actually putting something out to the real world.

Toolmaker


Yep, your compleatly right but the server transmits data a bit diffent from what your thinking. the position is the matrix of wich I speak. and I would never send full words for commands. Binary is better. but yeah still will take a good amount of bandwidth.
This is your life, and it's ending one minute at a time. - Fight club
Quote:Original post by EmptyVoid
... snip ...


What I'm doing for my Dune II clone(Networking part), is cut the game up in several components. For instance, I have a Lobby(in-game waiting room), Game and Synch(Which generates and compares hashes to make sure all clients are in synch with each other). All three are derived from an Interface and implemented as both xxxServer and xxxClient. Altho this is irrelevant for your game.

But, if you cut your server up in small NetworkComponents, such as Login, Inventory, Trade, Combat etc. your game will be manageable(As each component is nicely encapsulated), you cut down on required bytes for commands(As you such a byte for the System you address and another byte for the actual command), instead of sending 4 bytes for an integer.

I don't send text btw, but enums derived from System.Byte(I'm working in C#).

Good luck with that project... See you in 2 years so to say.

Toolmaker

This topic is closed to new replies.

Advertisement