Non solo fattibile, ma davvero buono, nella mia esperienza. Ho sviluppato diversi server MMO usando C # e devo dire che non mi sono mai pentito della scelta della lingua e della piattaforma.
Ci sono molte grandi librerie e strumenti per C # e .NET in generale - rete, registrazione, mappatura O / R, ecc. E, rispetto a Java C # è più espressivo e meno dettagliato (alcune persone potrebbero discuterne, però ... )
Il "sovraccarico" GC che spaventa alcune persone non è davvero un problema, a meno che non vi capiti di abusarne con miliardi di allocazioni al secondo. Ad esempio, il nostro server attuale alloca fino a 50 mb / secondo sotto carico pesante e GC non introduce alcun ritardo evidente. Abbiamo dovuto utilizzare il pooling di oggetti in luoghi strategici, ma soprattutto, gli oggetti che rappresentano i pacchetti di rete sono raggruppati e non raccolti in modo inutile. Tuttavia, anche con il pooling disattivato, GC non è il problema più grande.
Come esempio di quanto sia bello C #, questo è ciò che abbiamo implementato di recente. Il nostro server esegue diversi servizi WCF, che il client di gioco utilizza per attività non temporali e li usiamo anche per l'amministrazione del server. Si scopre che è molto semplice creare un servizio WCF per restituire semplicemente i nostri oggetti di gioco al chiamante. Quindi abbiamo fatto proprio questo, poi abbiamo creato un piccolo plugin per LINQPad che si collega al nostro server - e ora possiamo eseguire query come
from character in Service.GetOnlineCharacters()
where character.LocationManager.LocationId==5 && character.Attributes.Level<10
select new { character.Id, character.Nick }
Su un server live, niente di meno! Non penso che tu possa farlo con qualsiasi altra piattaforma. Almeno non nel lavoro di due giorni.