Świetny pomysł z tą grą. Technologia wybrana jak najbardziej trafnie. Teraz mamy bardzo ciekawe czasy, technologicznie. JavaScript jest na topie, a z nim bajery z szeroko pojętego HTML-a 5. Czyli po prostu nowych, otwartych standardów sieciowych, z API dostępnym z poziomu JavaScriptu.
Niestety, na prawdziwe P2P nie ma co liczyć. O ruchu gracza trzeba powiadamiać serwer i dopiero serwer może przekazać tę informację do pozostałych graczy. Powiadomienie serwera to prościzna (zwykły Ajax przejdzie), ale jak serwer ma powiadomić klientów...?
To odpytywanie serwera co sekundę, które wymyśliłeś (?), to znana, sprawdzona metoda, która działa w każdej przeglądarce. Zwie się polling (nie pooling!).
Nieco zmodyfikowaną wersją jest long polling. Polega na tym, że serwer nie odpowiada od razu, tylko przetrzymuje żądanie do upływu pewnej ilości czasu lub zajścia jakiegoś zdarzenia (np. ruch gracza). Kod po stronie klienta nie śle nowego żądania aż nie otrzyma odpowiedzi na stare, lub aż nie upłynie pewien ustalony okres czasu. Long polling jest nieco trudniejszy w implementacji, ale bywa (choć nie zawsze!) wydajniejszy/efektowniejszy. Do serwera idzie mniej żądań, więc sieć jest mniej obciążona. To jednak nie jest taka prosta kalkulacja, bo do równania dochodzi jeszcze koszt przetrzymywania żądań, wielowątkowości itd.
Long polling zadziała w każdej przeglądarce.
Nadal nie jest to jednak wygodna czy zaawansowana metoda.
Znacznie lepszy jest interfejs Web Sockets z HTML-a 5. Web sockety pozwalają na dwustronną komunikację z serwerem. Z poziomu JavaScriptu masz obiekt WebSockets i w nim np. zdarzenie onmessage
. Prosto. Wygodnie. Więcej informacji: http://www.html5rocks.com/en/tutorials/websockets/basics/
Nieco inną technologią są Server-Sent Events (w skrócie SSE; piszę oryginalne nazwy, żebyś mógł wygooglać). Serwer wysyła wtedy zdarzenia do klienta, a po stronie przeglądarki, w JavaScripcie masz obiekt EventSource
, do którego możesz rejestrować funkcje obsługi zdarzeń za pomocą addEventListener
(przy czym zdarzeniem message
oznacza, że serwer przysłał jakąś wiadomość). Więcej: http://www.html5rocks.com/en/tutorials/eventsource/basics/
Kolejnym sposobem jest jeszcze HTTP streaming, gdzie serwer nigdy nie kończy dokumentu i wysyła go na bieżąco, a my po stronie przeglądarki odczytujemy co i rusz np. ostatnią linijkę, która zawsze zawiera np. aktualne pozycje graczy. Nie jest to jednak zawsze obsługiwane przez przeglądarki.
Narzędzia z HTML-a 5 też nie są, ale zawsze możesz zrobić fallback na polling, albo po prostu olać przestarzałe przeglądarki. W przypadku gier -- można.