I realize the question seems very broad and subjective, but I’m mostly looking for suggestions on a platform choice so that I don’t paint myself into a corner later on (I’m more familiar with client-side programming, so excuse the lack of proper server jargon).
First: I am building a game. It will be multiplayer, with some real time interaction between players. Obviously, I’m not talking FPS, or even at the scale of a RTS, but something similar to what the Google Channel API does in terms of messaging.
I’m looking for the best Server/Client pairing.
Now, I’ve come to the realization as a result of my day job, that C# has become by far my best language. I’m also getting very familiar with WPF, so Silverlight seems like a natural extension of that understanding.
From what I can find search-wise, Silverlight is not a popular Facebook app platform. Is there a reason for this?
What’s the “standard” client-server pairing? Is it Flash for the front end, what’s the back end?
Does anyone have a favorite pairing? Easy to prototype/dev test?
Is there a good clientside platform choice that has an open source game engine, and can also reach a majority of browsers (i.e. the iPad as well as desktops)?
Edit: I have also stumbled upon the Windows Azure Social Toolkit. Anybody have an opinion on using that as a starting place?
http://watgames.codeplex.com/
Most social games use Flash for the front end because of its market saturation, roughly 98% right now. If you use anything else, you will lose potential users for two reasons: 1) some users cannot install the platform you want to use (e.g. a work computer with no administrator access) and 2) some users can, but they don’t want to install the platform you want to use.
As for the back-end, there is no “standard” and is more a matter of taste and preference. Use what you’re most comfortable with and prefer to code in.
Just make sure whatever back-end architecture you choose allows you to add more application servers and database servers without having to bring the game down. The easiest solution is probably distributed key-value databases (e.g. Cassandra) for this.