Temat: Globalna struktura danych po stronie serwera
W projekcie chcialbym moc kolejkowac przypisywanie graczy do konkretnych stołów/pokojow.
Jedne z zalozen projektu:
- na danym stole przebywac moga max 4 osoby,
- gracz jest przypisywany do randomowego stolu
Podsylam obrazek przedstawiajacy sytuacje, ktora mnie trapi.
Etapy:
- czas t1: znajdowanie wszystkich wolnych stolow
- czas t2: wylosowanie randomowego wolnego stolu
- czas t3: zapisanie odopowiednich zmian w bazie danych
Chodzi o moment t3. W tym czasie, gdy gracz nr1 zapisuje zmiany do bazy,
gracz nr2 w momencie t2 moze miec nieprawidlowo informacje o wolnych stolach,
gdyz moze zdarzyc sie sytuacja, ze wylosowany zostanie dla niego stol z 3 osobami,
gdzie w bazie gracz nr1 wlasnie sie zapisal czyniac pokoj pelnym.
I tak aby ustrzec sie przed powyzsza sytuacje doszedlem do wniosku,
ze odpowiednim rozwiazaniem bedzie kolejkowanie graczy i obslugiwanie
ich z osoba. W momencie, gdy danemu graczowi znajdziemy stol, zajmujemy
sie nastepnym, stad tez zamysl nieblokujacej kolejki FIFO, a z racji, ze musimy
jakos te dane trzymac dla wszystkich uzytkownikow aplikacji, musi byc
ona globalna (nie wiem jakiego innego slowa uzyc). Kwestią jest teraz to, gdzie
w kodzie programu utworzyć taką kolejkę aby każdy z graczy miał do niej dostęp.
Innym rozwiązaniem jest skorzystanie po prostu z bazy danych, ale nie wiem czy
nie będzie miało to negatywnego wpływu na wydajność.
PS: Dodam przy okazji, ze w projekcie korzystam z biblioteki SignalR.
Ten post został edytowany przez Autora dnia 18.08.13 o godzinie 20:47