Przekazywanie informacji pomiędzy sesjami (java servlet)

0

Witam!
Chciałbym zorientować się w następującym temacie.

Załóżmy że mam aplikację internetową na serwerze tomcat gdzie mam servlet i applet. W aplikacji mogą rejestrować się użytkownicy i umieszczać swoje dane personalne w bazie danych przez JDBC.
Do pracy aplikacji jest niezbędna częsta wymiana informacji pomiędzy użytkownikami.
Załóżmy że mamy 10 użytkowników i należy rozpocząć wymianę informacji pomiędzy dwoma użytkownikami.
Czy możliwa jest następująca wymiana informacji:
Użytkownik nr1 ma za zadanie przekazać drugiemu parametr typu int i robi to poprzez wpisanie tego parametru do swojej sesji w której jest zalogowany. Drugi użytkownik nr2 posiada własną sesję i stara się pobrać informacje zapisane w innej sesji (usera nr1). Czy jest to możliwe?

Ewentualnie sposób który wiem, że działa to zapisywanie informacji za każdym razem i bazie danych i następnie odczytywanie jej przez zainteresowanych użytkowników. Ale ze względu na częste wymiany danych pomiędzy użytkownikami powiedzmy co 2 sekundy pomysł jest zbyt "wolny".

Proszę o sugestie,
pozdrawiam.

0
kakuna napisał(a):

mam aplikację internetową na serwerze tomcat gdzie mam servlet i applet

Aplet dziala po stronie klienta, servlet na serwerze. To duza roznica.
Applet nie ma dostepu do sesji ktora jest na serwerze, wiec nic z niej nie wyciagnie. Ma co najwyzej dostep do ciasteczka ktore identyfiuje sesje, ale nie powinno miec miejsca, poniewaz to w sumie luka w bezpieczenstwie.
Jesli jeden user moglby grzebac w sesji drugiego usera to jest to calkowicie niebezpieczne rozwiazanie. Mozna krasc w ten sposob rozne rzeczy.

Jesli nie baza, to moze stan w aplikacji? Np. w servlet context cos wkladasz i wyjmujesz (nie zapomnij o synchronizacji). Wzglednie, jak chcesz wstrzykiwac zaleznosci, mozesz sobie zrobic jakiegos singletona ktoy bedzie takim stanem odpowiednio zarzadzal. Podales bardzo malo info.

0

Co do twojej uwagi przyznaję rację, ale jestem świadomy różnicy pomiędzy apletem i servletem.

Z tego co wiem do appletu mogą zostać przekazane parametry początkowe z sesji oraz do servletu przekazane parametry gdy applet jest niszczony

? Do do servlet context właśnie się zastanawiałem i wydaje się to być wykonalne.

Ideę mojego projektu można zamodelować jako następującą mini grę turową, gdzie obsługę zdarzeń realizuje applet komunikujący się z servletem.
Jeden gracz wykonuje akcje i informacje o tej akcji są przekazywane do drugiego gracza. I w danej chwili może być wykonywany ruch tylko przez jednego z graczy.

Czy w tym wypadku lepiej posługiwać się za pomocą servlet context?

Czy za każdym razem łączyć się z bazą danych i wpisywać na bieżąco akcje i wczytywać reakcje przeciwnika?

Jakie jest w ogóle podejście do takiego zagadnienia w tego typu problemach?
pozdrawiam

0
kakuna napisał(a):

Co do twojej uwagi przyznaję rację, ale jestem świadomy różnicy pomiędzy apletem i servletem.

Nice.

kakuna napisał(a):

Z tego co wiem do appletu mogą zostać przekazane parametry początkowe z sesji oraz do servletu przekazane parametry gdy applet jest niszczony?

Start apletu - parametry ktore sa w stronce ktra aplet zawiera, lub parametry ktore sa w pliku jnlp. Oba moga byc automatycznie wygenerowane, czyli mozesz sterowac jak apliet wystartuje. Gdy apliet sie konczy, wyslanie danych do servletu programujesz jako request http, nie ma zadnego mechanizmu ktory by sam automatycznie takie cos robil (mozliwe ze sie myle, nie pisze sie za duzo apletow - czytajacych prosze o poprawke). Dziala to tak jak w zwyklej aplikacji.

W trakcie dzialania rowniez mozesz wysylac dane do servletu, wlasnie poprzez laczenie sie i wysylanie rzadan get post lub czegokolwiek. Servlet odbiera takie rzadanie i wklada cos gdzies (do kontekstu, do jakiegos singletona, czy nawet jakiegos ejb.

kakuna napisał(a):

Czy w tym wypadku lepiej posługiwać się za pomocą servlet context?

Zalezy, czy chcesz aby te dane byly trwale - jesli np. w trakcie gry wylaczysz serwer, to czy gra ma zostac wznowiona po restarcie, czy jest to obojetne? W pierwszym przypadku musisz miec cos a'la game savy, ktore np. moga byc historia kazdego kroku az od rozpoczecia gry, i podczas wznawiania gry tworzysz nowa gre, nastepnie krok po kroku wykonujesz wszystkie ruchy w odpowiedniej kolejnosci, i jest. Jesli jest to obojetne, to servlet context bedzie zdecydowanie szybszy - nie ma nigdzie bazy danych. Dodatkowo, bedzie to duzo latwiejsze - nie musisz pisac sqli, uzywac or/m czy cokolwiek ktokolwiek ci podpowie (poczekaj na @koziolek), ten to zaraz wywali pewnie automatyczna generacje bytecodu i transakcje rozproszone...).

0

Głównym czynnikem przy wyborze bedzie wydajnosc/szybkosc. Jesli używanie w tym wypadku ciaglych wywołań SQL nie byloby zbyt wolne wolałbym tę drogę gdyż SQL nie sprawia mi problemow.
A'la savy sa tutaj nie potrzebne.

0

Jesli nie potrzebujesz savow i gry nie sa trwale (restart serwera konczy gre i nie mozna do niej wrocic) to daj sobie spokoj z sql, bo nie jest to potrzebne.

0

Źle zrozumieliśmy się. Potrzebuje save po skończonej partii. W celu zbierania statystyk itp. SQL jest niezbędny gdyż tam przechowuję zarejestrowanych graczy! Chodzi oto że nie trzeba robić save w trakcie partii. A ogólnie SQL jest tutaj niezbędny!!!

0

Wiesz co, nudzi mi sie ta rozmowa. Co ma zapisywanie do bazy wynikow do zapisywania do bazy tur. Mowisz ze nie potrzebujesz zapisywania, to po cholere chcesz zapisywac. Moje wrazenie jest takie, ze koniecznie chcesz zeby ci powiedziec ze tak, owszem, najzajebisciej jest zrobic to z sql, najlepiej wszystko zapisywac do bazy danych, zawsze. Nawet jak nie jest potrzebne. No wiec rob tak, zapisuj do bazy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0