Z mojego doświadczenia nie tylko wykonalne, ale naprawdę dobre. Opracowałem kilka serwerów MMO przy użyciu C # i muszę powiedzieć, że nigdy nie żałowałem wyboru języka i platformy.
Istnieje wiele świetnych bibliotek i narzędzi dla C # i .NET w ogóle - sieć, logowanie, mapowanie O / R itp. A w porównaniu do Java C # jest bardziej ekspresyjny i mniej gadatliwy (niektórzy mogą się o to kłócić .. )
„Narzut” GC, który przeraża niektórych ludzi, nie jest tak naprawdę problemem, chyba że zdarzy się, że wykorzystasz go miliardami przydziałów na sekundę. Na przykład nasz obecny serwer przy dużym obciążeniu przydziela do 50 Mb / s, a GC nie wprowadza zauważalnego opóźnienia. Musieliśmy jednak korzystać z pulowania obiektów w strategicznych miejscach - co najważniejsze, obiekty reprezentujące pakiety sieciowe są łączone w puli, a nie gromadzone w pamięci. Mimo to, nawet przy wyłączonym poolingu, GC nie jest największym problemem.
Jako przykład tego, jak fajne jest C #, właśnie to niedawno wdrożyliśmy. Nasz serwer obsługuje kilka usług WCF, z których korzysta klient gry do zadań niekrytycznych czasowo, a my używamy ich również do administrowania serwerem. Okazuje się, że bardzo łatwo jest zrobić usługę WCF, aby po prostu zwrócić nasze obiekty gry do osoby dzwoniącej. Właśnie to zrobiliśmy, a następnie stworzyliśmy małą wtyczkę do LINQPad, która łączy się z naszym serwerem - a teraz możemy uruchamiać zapytania takie jak
from character in Service.GetOnlineCharacters()
where character.LocationManager.LocationId==5 && character.Attributes.Level<10
select new { character.Id, character.Nick }
Na serwerze na żywo, nie mniej! Nie sądzę, że możesz to zrobić na jakiejkolwiek innej platformie. Przynajmniej nie w pracy na kilka dni.