Piszę sobie grę przegladarkową (text-based) i używam node.js wraz z socket.io, jako bazę danych MySQL. Projekt znajduje się w mocno początkowej fazie, ale już kilkukrotnie przepisywałem cały kod, aż pewnego dnia wpadłem na ,,genialny" pomysł, aby najpierw zaprojektować jak będzie to wszystko wyglądać a potem wziąć się za pisanie.
Zastanawiam się jak będzie wydajniej (jestem jednym z tych, którzy myślą, że ich projekt się rozwinie i będzie liczył sporo graczy). Podczas wybierania informacji z bazy danych muszę je ubrać w elementy DOM, żeby to wszystko jakoś wyglądało po wyświetleniu w przeglądarce, a to wiąże się z konkatenacją tego, co wyjmuję z tabel z odpowiednio spreparowanymi stringami. Aktualnie większość konkatenacji odbywa się już w bazie danych i serwer otrzymuje tekst sklejony w całość, gotowy do doczepienia do reszty DOM'u.
Logikę gry zamierzam trzymać w triggerach/funkcjach i procedurach w bazie danych, a serwerowi zostawić sterowanie przepływem informacji między użytkownikami i bazą danych. Bazę widzę jako jądro gry, a serwer jako narzędzie blokujące spam, kontrolujące zapytania przysyłane przez użytkowników itd.
A może część danych trzymać np. w globalnie dostępnych tablicach/obiektach w kodzie serwera? Teraz np. wszystkich zalogowanych użytkowników trzymam w globalnie dostępnej tablicy jako obiekty {user_id: ..., socket_id: ...} choć wiem, że socket_id mógłbym po prostu zapisywać po każdym połączeniu w bazie danych i stamtąd to wyciągać w procedurach/funkcjach. I tak pewnie zrobię.
Póki co gra jest kompletnie oparta o tekst i elementy DOM'u ,,wzbogacone CSS'em", nie ma żadnej grafiki i w najbliższej przyszłości jej nie będzie. W odległej przyszłości, gdy gra ujrzy światło dzienne zamierzam przerobić ją na wersję graficzną z chodzeniem postaci po mapie rysowanej w canvas'ie, kolorowymi efektami skilli używanymi przez postacie etc, więc projektując ją teraz mam też na uwadze w tyle głowy przyszłość projektu.
Ciekawi mnie jak wy się zapatrujecie na tę sprawę. Jak byście rozkłożyli ciężar i funkcjonowanie elementów takiej gry?