Autor Wątek: RTS via www  (Przeczytany 2090 razy)

Offline adriano5512

  • Użytkownik

# Maj 08, 2015, 22:56:56
Witajcie, szukam kogoś bardziej zaznajomionego w temacie ode mnie. Szukałem po forach i przeglądałem gotowe skrypty. Interesuje mnie w jakis sposób najlepiej byłoby wykonać skrypt dla gry rts podobnej do traviana bądź plemion. Zauważyłem że w gotowcach jest wykonywane coś takiego że gracz po prostu sprawdza czy miałą się odbyć walka, w danym sojuszu, czy miała sie wyszkolić jednostka itd itd. Nie wiem jak wydajność takiego podejścia bo przecież przy większej ilości graczy mamy już bardzo wiele zapytań do samej bazy.

Zastanawiałem się czy nie lepiej by napisać program działający w tle który by otrzymywał zadania do wykonania, odliczał czas i wstawiał już tylko wyniki danych działań do bazy. Tutaj także szukałem jak przekazywać dane dla już działającego programu, czy da się to wykonać w php. Moje poszukiwania skończyły się jedynie poszlakami.

Byłbym bardzo wdzięczny za linki do materiałów oraz wypowiedzi odnośnie możliwych podejść do danego tematu.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline timus

  • Użytkownik

  • +2
# Maj 09, 2015, 01:01:58
Zastanawiałem się czy nie lepiej by napisać program działający w tle który by otrzymywał zadania do wykonania, odliczał czas i wstawiał już tylko wyniki danych działań do bazy. Tutaj także szukałem jak przekazywać dane dla już działającego programu, czy da się to wykonać w php. Moje poszukiwania skończyły się jedynie poszlakami.
Mniej więcej tak działają serwery w grach nieprzeglądarkowych mmorpg. Użycie WebSocket powinno załatwić sprawę, można taki serwer napisać w PHP(wtedy skrypt się nie kończy i odbiera połączenia), ale trzeba mieć hosting z dostępem do shell'a, a mając taki hosting to już nie widzę sensu pisać tego w php skoro można pisać w jakimkolwiek innym lepszym języku. U wujka googla można znalezc nieco tutoriali odnośnie samego websocket.

Offline adriano5512

  • Użytkownik

# Maj 09, 2015, 14:35:10
W takim rozwiązaniu najlepiej wykonać to w ten sposób że użytkownik po zalogowaniu jest ciągle połączony przez socketa czy np po wysłaniu ataku robić szybkie połączenie, przekazać co się chce i zakończyć?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +5
# Maj 09, 2015, 15:15:10
Cytuj
Interesuje mnie w jakis sposób najlepiej byłoby wykonać skrypt dla gry rts podobnej do traviana bądź plemion.
Myślę, że masz błędną definicję gry RTS.

Offline Xender

  • Użytkownik

# Maj 09, 2015, 15:22:26
@adriano5512 - Raczej lepiej wykorzystać istniejące połączenie.
Mniej negocjacji połączeń, mniej pakietów przepchanych przez rurkę, szybsza reakcja...

Chociaż proponowałbym rozłączać przy dłuższej nieaktywności i ogarniać sytuacje, gdy gracz łączy się ponownie (niekoniecznie wskutek rozłączenia przez serwer - gracz może uśpić kompa, może mu paść net...).
Więc trochę JS-u u klienta będzie potrzebne.

Można bez websocketów, wtedy jest prościej, bo można serwować choćby statyczną stronę bez żadnego JS.
To nie przeszkadza mieć rezydentnego serwera - Flask tak działa.
Tylko, że wtedy każde polecenie to synchroniczne żądanie HTTP do serwera i odświeżenie strony...

Poszukaj też o AJAX.

Offline Xion

  • Redaktor
    • xion.log

# Maj 09, 2015, 20:20:11
Cytuj
Tylko, że wtedy każde polecenie to synchroniczne żądanie HTTP do serwera i odświeżenie strony...
Raczej niespecjalnie godzi się to z "R" w "RTS" :)

@OP: Jedyna opcja zaimplementowania tego tak, aby czas odpowiedzi serwera i klienta był znośny, to dedykowane sieciowego sockety (nawet nie AJAX). WebSockets, Channel API w Google App Engine, socket.io, etc.

Offline adriano5512

  • Użytkownik

# Maj 09, 2015, 23:17:08
Hehe :) no chodziło i imitacje "R"TS.

Wracając do tematu, zastanawiam się czy ma sens trzymać i utrzymywać połączenia z użytkownikami. Czy nie lepiej było by po prostu przekazywać same dane np.
Atak takiej liczby wojsk zmierza w kierunku osady b i dotrze na miejsce o ... Programik po sprawdzeniu że już powinno się akurat to wykonać, sprawdza, oblicza i wstawia wynik do bazy. Sama zaś gra po prostu by wyświetlała to co aktualnie jest w bazie oraz umożliwiała wydawanie poleceń do tego właśnie programu. Jeśli chodzi o kwestie wykonawcze to nie musi to przecież nawet iść po websocketach. Jestem ciekaw czy takie podejście by się sprawdziło. Nie wiem tylko jak przekazać dane do np już działającego programu w c++, javie lub pythonie.

Jedne z rozwiązań jakie przyszło mi to głowy to żeby program zczytywał pliki z danego folderu po czym je usuwał. Wtedy nie musimy nic przesyłać do już działającego programu, a sama strona mogłaby po prostu tworzyć te pliczki w tym folderze.

Offline Xender

  • Użytkownik

  • +3
# Maj 09, 2015, 23:38:18
@up - Nie masz pojęcia, w co się pakujesz.

Nie ma żadnych przeciwwskazań teoretycznych, by program za każdym uruchomieniem czytał stan świata gry z bazy danych, sprawdzał aktualny czas, wykonywał symulację i aktualizował ten stan, przy okazji obsługując żądanie klienta.

Jest jedno ograniczenie praktyczne.
Wydajnościowo coś takiego nie ma racji bytu, przynajmniej zaimplementowane naiwnie.

Jak nie wiesz, "jak wysyłać dane do już działającego programu", to będziesz musiał się tego po prostu nauczyć.
Pisanie na zasadzie "skrypcik w PHP, baza MySQL, kolejki wiadomości na plikach tymczasowych na dysku, wszystko na jakimś pierwszym-lepszym darmowym hostingu, mało umiejętności, dużo taśmy klejącej" skończy się, zanim się zacznie.

Offline adriano5512

  • Użytkownik

# Maj 13, 2015, 10:48:56
Dziękuję wszystkim za wypowiedzi. Zawsze denerwuje mnie jak szukam odpowiedzi po forach i natrafiałem temat otwarty, więc mam nadzieję że nikt nie będzie mi miał za złe jak napisze rozwiązanie które wybrałem.

Postanowiłem  zrobić to na http://socketo.me/. Postanowiłem również nie autoryzować tam użytkowników a dane odbierane będą jedynie przez localhost. Resztą się zajmę już w osobnym skrypcie. Myślę że to wszystko wystarczy jak na moje potrzeby, a plusem tego rozwiązania będzie łatwe przepisanie serwerka na inny język w razie konieczności.