Większość pytań znajduje się w tytule.
Zasadniczo zaczynam opracowywać wieloosobową grę akcji 2D. Klient będzie (prawdopodobnie) w XNA i pomyślałem, że zapytam tutaj, czy dobrym pomysłem jest używanie C # również do programowania po stronie serwera.
Myślę, że zarządzanie językiem nie jest problematyczne, ponieważ Java jest używana nawet na serwerach gier MMO (popraw mnie, jeśli się mylę), więc czy są jakieś powody, aby unikać C # w tym celu? Potrzebuję, aby był szybki i elastyczny, komunikował się przez TCP, rozmawiał z serwerem SQL. A jeśli nie ma powodu, aby unikać C #, w jaki sposób wdrożyłbym taki serwer sieciowy, czy byłby to plik .NET EXE działający na serwerze?
Odpowiedzi:
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
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.
źródło
Jasne, możesz użyć C #.
Jednym z większych problemów, o których należy pamiętać, jeśli chodzi o wydajność w C # lub innych ekosystemach .NET, jest GC - platforma .NET zapewnia kilka odmian GC , w tym GC „serwerową”, o których warto się dowiedzieć. Inteligentne zarządzanie pamięcią (na przykład poprzez pule) jest nadal dobrą techniką nawet w zarządzanym środowisku.
Istnieje kilka niezawodnych interfejsów API do interakcji z SQL, komunikowania się przez TCP i tak dalej w języku C #, albo jako część podstawowej struktury, albo za pośrednictwem stron trzecich, więc nie powinieneś mieć żadnych problemów.
Możesz użyć ASP.NET lub podobnego oprogramowania, jeśli naprawdę chcesz, aby twój serwer był oparty na sieci; jeśli chcesz tylko uruchomić proces i nasłuchiwać połączeń TCP, możesz po prostu wdrożyć plik .exe i odpowiednie zależności na serwerze, otworzyć odpowiednie porty i uruchomić plik .exe.
źródło
Myślę, że to świetny pomysł. Język jest z pewnością do tego zdolny, a zwłaszcza jeśli wiesz, nie marnuj czasu na naukę nowego języka tylko dlatego, że jest „szybszy”. Prawdziwym wąskim gardłem twojego serwera będzie opóźnienie sieci; dodatkowa milisekunda lub dwie, ponieważ użyłeś C # zamiast C ++ nie zrobi różnicy.
źródło
Jeśli możesz wdrożyć w systemie Windows, zdecydowanie polecam, zwłaszcza, że twój klient to C #.
Nie lekceważ jednak rozwoju serwerów gier. Nawet stworzenie prostego serwera współbieżnego tylko do czatu nie jest łatwym zadaniem, a wkrótce będziesz mieć wiele pytań dotyczących współbieżności, blokowania, wydajności itp.
Na początek chciałbym, abyś spojrzał na tę stronę, która szeroko wyjaśnia, jak wykonywać współbieżne programowanie gniazd na kilku platformach:
http://geekswithblogs.net/quension/archive/2006/06/30/83760.aspx
Jeśli naprawdę podchodzisz do tego poważnie, poleciłbym gruntownie przestudiować programowanie sieciowe Unixa Stevensa. Koncentruje się na gniazdach C w systemie Unix, ale zasady są takie same dla każdej innej platformy, w tym .net.
Edycja: to kolejny świetny zasób, skoncentrowany na skalowalności i wydajności dla współbieżnych serwerów w .net. Nie jest już dostępny, ale nasi znajomi z przydrożnej maszyny mają jego kopię.
http://replay.waybackmachine.org/20080405220143/http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/10/Default.aspx
źródło
Jedną „wadą” byłoby to, że z C #, jeśli chcesz używać go na wielu platformach, musisz bardzo uważać, aby upewnić się, że Twój kod będzie działał w trybie mono. Jeśli zależy Ci tylko na uruchomieniu go na jednej platformie, a Windows to właśnie ta platforma, nie powinieneś mieć problemów, jak wspominali inni.
źródło