2011-10-26 19 views
8

Jestem zainteresowany tworzeniem RPG w trybie multiplayer jako gry wyłącznie z przeglądarką, z niewielkimi lub bez wymagań wtyczek. Po wykonaniu wielu badań dotarłem do następującego planu. Zdaję sobie sprawę, że niektóre technologie, o których tutaj mowa, nie są przyjęte we wszystkich przeglądarkach (w szczególności w IE), ale jestem gotów to zaakceptować w tej chwili.Przeglądarka sieciowa dla wielu graczy - czy wydaje się to realnym rozwiązaniem?

Ponadto - zdaję sobie sprawę, że MMO jest szczytnym celem, do którego należy dążyć w każdym przypadku, ale w przeszłości robiłem wiele mniejszych projektów w podobnym kierunku, mam wrażenie, że chcę to naprawdę dobrze idź w końcu.

Więc heres szorstki zarys, chciałbym usłyszeć od rażących problemów każdy może zobaczyć w tym układzie:

KLIENT: WebGL/Javascript (prawdopodobnie three.js). Użyj lokalnego magazynu przeglądarki do przechowywania zasobów gry, przyjmując, że usunięcie pamięci podręcznej przeglądarki spowoduje ich usunięcie.

WIADOMOŚCI: wiadomości kodują między klient/serwer przy użyciu google protocol buffers, dla wygody i rozdrabniania. Dostarczenie wiadomości nastąpi za pośrednictwem WebSocket.

GAME SERVER: działa na szczycie gevent w python (wydaje się być dobrym rozwiązaniem do czynienia z wieloma concurrents). Zostanie zbudowany przy użyciu sharded wzór, na podstawie projektu here:

DB SERVER: MySQL do bazy danych, PHP działającego pomiędzy nimi serwera gry i DB.

SZCZEGÓŁY: zamierzam mieć serwer aktualizacji gry indywidualnego klienta około 15-20 razy na sekundę i używać przewidywania po stronie klienta, aby wypełnić luki. Klienci mogą wysyłać kluczowe dane wejściowe/wiadomości do serwera w obszarze 30 fps. Wolałbym wybrać doświadczenie, które jest jak najbardziej zbliżone do czasu rzeczywistego, a nie turowe. Moją główną obawą jest protokół TCP oparty na WebSocket, czy to wszystko uniemożliwi?

Czy to rozwiązanie wydaje się realistyczne?

wiele dzięki,

Odpowiedz

1

Zazwyczaj dostać 5MB przestrzeni z API localStorage. Jeśli naprawdę masz grę 3D z dźwiękiem/muzyką, to naprawdę szybko zostaniesz spożyty dzięki swoim zasobom (jak duże jest obecnie dobrej jakości mp3?). Musisz być bardzo agresywny przy kompresowaniu zasobów i najprawdopodobniej musisz wymyślić mechanizm do przesyłania i usuwania danych z lokalnej pamięci podczas działania gry.

Pytam, dlaczego potrzebujesz PHP między serwerem gry a bazą danych. Czy serwer gry nie może bezpośrednio rozmawiać z bazą danych i zaoszczędzić trochę pracy?

Życzymy powodzenia w projekcie.

+0

Ah! Cóż, to jedna rzecz, której nie wiedziałem od razu, 5mb jest dość ograniczającym czynnikiem, więc tak, w takim razie byłaby jakaś transmisja strumieniowa.Jeśli chodzi o PHP, pomyślałem, że sensownym rozwiązaniem byłoby pobranie części obciążenia z bazy danych z serwera gry, aby mógł skoncentrować się na obsłudze klienta tak szybko, jak to możliwe, i po prostu okresowo odpalać fragmenty danych napisane do DB, bez zobowiązania do formatowania i zapisywania tych samych danych – bharling

+0

Tak, spróbuj spojrzeć na CouchDB, obsługuje połączenia REST od razu. – Anders