Jak obsługiwać tryb wieloosobowy w JavaScript?

12

Robię tylko trochę badań nad technologią, którą można wykorzystać w mobilnej grze wieloosobowej.

Obecnie jest to raczej eksperyment, więc na razie jedyną rzeczą, o której Gracze muszą wiedzieć, są inni Gracze.

Gdyby była to typowa aplikacja internetowa, a nie gra, po prostu ciągle wysyłałyby żądania HTTP - ale ponieważ jest to gra, wydajność i dokładność będą stanowić problem.

Ponieważ gra jest kierowana na wiele platform telefonicznych, powiedzmy, że klient zostanie napisany w JavaScript lub w środowisku opartym na JavaScript. Technologia serwerowa jest całkowicie otwarta.

Każdy gracz będzie musiał zrobić odpowiednik postu HTTP i uzyskać tylko przy użyciu szybszego protokołu. Powodem, dla którego gra wieloosobowa jest oparta na sieci, jest to, że gra wieloosobowa przez Bluetooth lub inną sieć lokalną byłaby zbyt zróżnicowana na różnych platformach i mogłaby powodować problemy.

Pytanie sprowadza się więc do tego, jaki dobry protokół / technologię zastosować w JavaScript dla wielu graczy? Wszelkie porady na temat rzeczy po stronie serwera czy to ma znaczenie? Czy jest jakiś powód, dla którego powinienem porzucić tę dwupoziomową architekturę i skorzystać z bezpośredniego połączenia telefon-telefon?

OVERTONE
źródło

Odpowiedzi:

15

Potrzebujesz lepszego protokołu komunikacyjnego niż HTTP. Prawdopodobnie chcesz UDP lub TCP. Przeglądarki nie mają możliwości komunikacji UDP, więc jedynym wyborem jest TCP.

W przypadku TCP chciałbyś użyć WebSocket , jednak obsługa przeglądarki jest niestabilna na WebSockets .

Oznacza to, że będziesz musiał użyć techniki COMET do emulacji TCP, jedną z popularnych emulacji byłby websocket osadzony w aplikacji flash.

Socket.IO to biblioteka (dla node.js ), która obsługuje websockets i emuluje je z odpowiednią rezerwą w niezgodnych przeglądarkach internetowych (wykorzystuje flash i inne techniki COMET).

W przypadku gier JavaScript dla wielu graczy polecam użycie socket.io i node.js

Raynos
źródło
1
Oto przykład gry w czasie rzeczywistym wykonanej za pomocą HTML5 i WebSockets: rawkets.com . Kod źródłowy jest dostępny tutaj: github.com/robhawkes/rawkets
Elisée,
1
Oto dwa kolejne przykłady
Raynos,
4

Zarówno pytanie, jak i zaakceptowana odpowiedź zostały opublikowane w 2011 roku, a czasy się zmieniły od :)

Websockets jest dość powszechny, ale jeszcze lepszą technologią jest WebRTC, który pozwala na niewiarygodne strumienie UDP. Są znacznie lepsze w przypadku gier.

Oprócz komunikacji istnieje wiele innych przeszkód do pokonania podczas pisania gier dla wielu graczy, takich jak uzgadnianie stanu gry, przewidywanie po stronie klienta, serializacja i wiele innych.

<shameless self promotion>

Jestem jednym z pierwszych twórców lance.gg , serwera / biblioteki gier wieloosobowych opartej na node.js, w którym rozwiązaliśmy wiele wspomnianych problemów (i wiele innych!). Naszym celem jest ułatwienie tworzenia gier wieloosobowych dla programistów gier JavaScript. Serdecznie zapraszam do wykorzystania go jako punktu wyjścia do stworzenia gry.

</shameless self promotion>

OpherV
źródło