Post by A.R.Post by A.R.http://java.sun.com/docs/books/tutorial/applet/index.html
napisac prosty przyklad i umiescic na stronce (banal)
Oczywiscie ze nie servletami tylko *APLETAMI*. Sorry.
Pozdrawiam
A.R.
Uff, to naprawde nie jest nic latwego taka gra.
Polecalbym najpierw zajac sie jakos sensownie komunikacja, i jesli
naprwade miala by byc dosyc dynamczna to niestety baaardzo wskazane jest
takie paskudztwo jak... UDP, ciarki mnie przechodza na mysl o
obkodowaniu tego ale jesli "stan" u klienta (w applecie) mialby byc
synchronizowany dajmy na to hmm, ponad 5 razy na sekunde to to jest
konieczne. Jesli nie to uzyj strumienia TCP (i wszystkich zwiazanych z
tym blogoslawienst). Natomiast jesli moze byc co jakies 2 sekundy to
(albo gra turowa, czy prosty chat) to wtedy moze to byc Servlet (czyli
HTTP przez TCP).
Proponowalbym Ci poczytac o tym o co musisz sie martwic od strony
oprogramowania UDP:
"Multiple packets sent from one machine to another might be routed
differently, and might arrive in any order. Packet delivery is not
guaranteed."
jesli to Cie nie zniecheca to dalej taka drobna sprawa, do nasluchy na
kazdym polaczeniu z kleintem (appletem) musisz uzyc osobnego watku, co
implikuje ze musisz byc obcykany w wątkach i to nieźle. Albo obckany w
pakiecie java.nio.*, prawde mowiac nie wiem co latwiejsze :).
Ale dla pocieszenia to nie jest nierealny projekt, proponowalbym
rozmowic sie z jakimis kolegami zebyscie sie jakos praca podzielili.
Ale takie przedwsieziecie zaliczylbym do nastepujacej kategorii:
http://www.chebucto.ns.ca/Science/AIMET/death_march/
Serwer musialby pracowac w ciasnej petli:
--
update stanu swiata/gry po stronie serwera
rozeslanie stanu do wszystkich graczy
odebranie "dzialań" od graczy
--
a klient:
--
update stanu po stronie klienta (synchronizacja z serwerem)
sczytywanie "dzialan" uzytkowanika
wyslanie "dzialan" do serwera
--
I jesli nie dostrzegasz problemow ktore tu sa to juz wyjasniam:
-rozsylanie/odbieranie/przeliczanie stanu przez serwer musialoby byc
robione wspolbierznie, zeby gracze z duzym "pingiem" nie spowalniali innych.
-synchronizowanie stanu przez klienta powinno byc robione "niewidocznie"
dla gracza, gracz cos robi a moze nie wiedziec ze "facet do ktorego
strzela" juz umarł na "serwerze" i tego typu problemy, albo dwoch
strzela do siebie w tym samym momencie i tak naprawde przezyje ten
ktorego pakiet dotrze do serwera pierwszy (takich rzeczy nie jest w
stanie klient przewidziec).
-w przypadku UDP musisz poswiecic niezawodnosc transmisji, pakiet moze
niedotrzec do serwera/klienta albo moze przyjsc przed pakietem wyslanym
pozniej. a jednoczesnie nie mozesz pozwolic na takie sytuacje: jesli
uzytkownik "strzeli" to ten strzal nienastapi, musisz w przypadku
niektorych waznych akcji "próbowac do skutku" az informacja dojdzie do
serwera. To jest baaaardzo upeirdliwe, wiec moze lepiej wrzucac wszystko
w strumien TCP i nie zapominac o tym zeby w odpowiednich momentach go
flush()'owac, dodatkowo skonfigurowac gniazdo tcp zeby informacje nie
byly za dlugo buforowane.
-musisz miec dostep do maszyny na ktorej posadzisz program "serwera"
przy pomocy zwyklej javy, a nie tylko "WWW Hosting" gdzie łaskawie dali
ci tomcata - musisz miec mozliwosc postawienia nasluchu od graczy na
jakims porcie na maszynie z zewnetrznym IP i dodatkowo miec tam JRE (no
chyba ze znajdziesz taki hosting ze z posiomu servletu bedziesz mogl
otworzyc sobie gniazdko na innym porcie, ale to ma ogromna wade bo
przestoje tomcata powodowalyby przestoje serwera gry - mocno wskazany
jest oddzielny proces dla serwera gry. Zeby applet mogl sie komunikowac
z tym sererem gry to musi on stac na tej samej maszynie z ktorej zostal
pobrany applet (to ograniczenie da sie troche zlagodzic). wiec radzilbym
uzyc nie appletu tylko WebStarta - wygodniejsze niz applet jest nawet,
poczytaj sobie.
Chyba ze zrobisz gre turowa wtedy nie masz problemu z watkami i w petli
klienta i serwera wszytko odbywa sie po kolei a nie równoczesie. Jesli
zrobisz internetowe warcaby to nie bedzie prawie wszystkich problemów
ktore tu wymienilem, i bedziesz mogl wykorzystac nawet servlety
Jesli Cie nie zniechecilem to szczerze życze powodzienia