Przeglądarkowa gra turowa - jak ogarnąć multiplayer?

Przeglądarkowa gra turowa - jak ogarnąć multiplayer?
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

Witam.
Mam w planach napisać grę przeglądarkową. Gdzie kwestie serwera raczej miałbym ogarniętą (w gruncie rzeczy to nie ma znaczenia w jakiej technologii będzie serwer), tak kwestia samego www mnie troszkę przeraża.

GRA
Turowa, z podziałem na stoły, max 2os/stół.

SERWER
C#, .NET Core

KLIENT
Chciałbym w Angularze, ponieważ w tym mam doświadczenie. Nie mam zaś doświadczenia w socketach, a WebAPI w tym przypadku to kiepski pomysł.

  1. Czy to w ogóle jest realne? Mam wrażenie, że JS'owe frameworki nie są do robienia gier.
  2. Może Blazor i SignalR? (nie ten dział, wiem)
  3. Jak się zabrać za te sockety?
    a. GameServer - socket odpowiedzialny na odbieranie połączeń z każdego pokoju
    b. GameServer - osobny socket dla każdego pokoju

Obawiam się, że brakuje mi elementarnej wiedzy w tego typu projektach ale nie mam zamiaru się poddać.

SW
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:250
0

Użycie SignalR jest całkiem łatwe, wystarczy skorzystać z dokumentacji, wygląda podobnie do kontrolera z ASP. NET. Możesz też używać websocketów poza kontekstem żądania HTTP dzięki IoC. Do tego jest też npm dla klienta JS. Dodatkowo umożliwia dodawanie użytkowników do grup i rozgłaszanie według nazw grup. Jeśli to projekt pisany dla funu, framework JS powinien wystarczyć :)

Jedno połączenie per zalogowanie i grupy - tędy bym szedł.

edytowany 1x, ostatnio: SkrzydlatyWąż
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

Pytanie tylko jak rozgraniczyć, który socket jest z której grupy? Gdzie logowanie chce zrobić metodą tradycyjną - token z WebAPI, w którym (w bazie) trzymam dane zarejestrowanych graczy. Jeśli token jest niepoprawny to nie przejdzie endpoint CreateGame albo JoinGame. Widzę dwie opcje:

WebSocket Endpoint - generowanie endpointu o konkretnym id

Kopiuj
webSocket('ws://localhost:23235/game/{game_id}');

JSON - jeden endpoint webSocket('ws://localhost:23235/game);

Kopiuj
{
   method: 'create',
   gameId: id
}
// lub
{
   method: 'join'
   gameId: id,
   playerId: id
}
SW
Nie musisz robić wielu endpointów. Generalnie masz endpoint per Hub, czyli połączenie. Wewnątrz metod Huba ogarniasz grupy.
bakunet
  • Rejestracja:około 8 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Polska
  • Postów:1610
1

Hej, dość niedawno napisałem grę w statki przy użyciu Angular + ASP.NET Core z SignalR. W sumie tylko żeby się nauczyć Angulara.

Tu jest SignalR Hub po stronie serwera.

Tu jest SignalR service po stronie klienta.

P.S. Jak będziesz miał pytania co do implementacji to pisz śmiało. Jak wspominał @SkrzydlatyWąż , SignalR jest dość prosty w użyciu.

edytowany 1x, ostatnio: bakunet

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.