Połączenie klient - serwer

0

Witam.
Otóż mam zamiar napisać pewną aplikację (grę MMORTS konkretniej, coś na wzór lordofultima.com). Klient będzie utworzony przy pomocy języka javascript (podobnie jak w tamtej produkcji). Natomiast nie jestem pewien w jakiej technologii powinien działać serwer tejże aplikacji. Rozważam opcje: PHP / Node.js / C# / C++.
Przewidywana liczba graczy na 1 serwerze to ok. 10 tysięcy (1-2tysiące online max). Dlatego też wydaje mi się że PHP będzie zbyt wolne. Najbardziej optymalnym językiem wydaje mi się c++, z racji tego że jest on chyba najszybszy z podanych języków (w dodatku, najlepiej znam jego składnię).
Tak więc kilka pytań do was forumowicze:

  1. Jakiego języka powinienem użyć do napisania aplikacji serwerowej ?
  2. W jaki sposób połączyć aplikację kliencką (w js) z serwerową (w c++, bądź języku który podaliście w pytaniu 1). Myślałem nad opcją z socketami, ale nie jestem pewien czy to dobre wyjście.
  3. Jakiej bazy danych powinienem użyć? (gra nie jest w pełni real-time'owa, rozkazy dla wojsk są planowane - gracz otrzymuje tylko informację kiedy atak dojdzie, natomiast licznik surowców mógłby być zmieniany przez klienta i weryfikowany co kilka sekund / w przypadku zlecenia nowej budowy, etc.)

Dziękuję za wszelką pomoc. :)

0
  1. Użycie C++ do aplikacji webowych najczęściej jest złym pomysłem. Ja na twoim miejscu utworzył bym aplikację MVVM z użyciem np. Angulara. Jako backend dał bym to co umiem najbardziej (nawet PHP da się zrobić by działało wydajnie, patrz FB), czyli w moim przypadku RoR'a, jednak Node czy ASP.NET też się nada.
  2. Przy tym masz mnóstwo opcji jak WebSockets (problem ze wsparciem), pooling (możliwe mordowanie serwera) czy Flash (uzależnienie się od zewnętrznej technologii). Tu polecił bym skorzystać z gotowych rozwiązań jak Faye, które pozwolą Ci uzyskać zadowalający efekt dość małym nakładem pracy.
  3. Co do bazy danych to najprawdopodobniej i tak będziesz potrzebował kilka. Jakąś relacyjną bazę danych do zarządzania krytycznymi systemami aplikacji, NoSQL do zarządzania danymi do których jest potrzebny szybki dostęp oraz jakiś K-V do zarządzania kolejkami procesów.
0

Dzięki za odpowiedź.

  1. Dlaczego C++ jest złym pomysłem?
    Co do MVVM, wolałbym go uniknąć, bo moje doświadczenie z tym modelem jest zerowe. Co do backendu, w ostateczności spróbuję go zrobić i zoptymalizować w php, a jeśli się nie uda to użyję Node.
  2. Właśnie tak myślałem nad jakimś gotowym rozwiązaniem (głównie nad Socket.IO, ale sprawdzę też Faye)
  3. Na pewno aż tyle baz danych będzie koniecznych? Myślałem bardziej właśnie o 2 bazach, jednej szybkiej (do aktualizowania danych gracza i zarządzania wszelkimi danymi rejestracji) i drugiej właśnie do kolejkowania. Mógłbyś polecić jakąś konkretną do kolejkowania ?
0
  1. Gdyż ciężko jest napisać w C++ stronę w sposób taki by było to bezpieczne (przynajmniej moim zdaniem). Dużo prościej jest napisać w jakimś Node/Python/Ruby/etc.
  2. Redis

1 użytkowników online, w tym zalogowanych: 0, gości: 1