![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 12 Dołączył: 20.12.2009 Skąd: Siedlce Ostrzeżenie: (0%) ![]() ![]() |
Tworzę obecnie grę przez przeglądarkę. Zdecydowałem się na php+mysql po stronie serwera (z gotowym miejscem na implementację memcache) i html+css+js po stronie przeglądarki (bez uroków html5). Dodatkowo do gry równolegle powstaje klient w c#.
Nie przewiduję 100k graczy on-line, raczej coś koło tysiąca więc uznałem, że w/w technologie wystarczą, wręcz mają jeszcze zapas. Przemieszczanie się po mapie jest real-time względem innych graczy, a sama walka jest w zamyśle turowa. (dopiero biorę się za jej tworzenie). komunikacja klient<->serwer mapa: klient odpytuje serwer co 1s lub gdy wykona dowolną akcję (poruszy się, zmieni eq) walka: W planie było tak samo. Komunikacja odbywa się za pomocą API (a nie każde zapytanie ma inną strukturę, każdy POST inny schemat). Dzięki temu możliwe jest tworzenie klienta w C# przez inną osobę. Uznałem jednak, że jest to dość niewygodne rozwiązanie. Nie chcę skazywać na zapomnienie silnika napisanego w php. Nie jest on ukończony, ale pochłonął wystarczająco dużo godzin, aby go uznać za 'cenny'. Wydumałem sobie, aby połączyć node.js z php. Czyli komunikacja by wyglądała mniej więcej w ten sposób: Kod klient<->node<->php | | mysql klient - widok;node - kontroler;php - część wykonawcza Prosiłbym o rady w jaki sposób mogę wykonać integrację node z php, w jaki sposób wykonać skrypty php przez node. W tym wypadu klient nie musiałby odpytywac serwera co 1s, tylko node (socket.io) sam wykonywałby skrypt php i wysyłał dane do klienta. Z góry dziękuję Jeśli ktoś jest zainteresowany samym projektem mogę wysłać linki na pw, nie chcę, aby temat wyglądał na reklamę. Ten post edytował foxbond 15.09.2013, 10:18:09 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, trochę mało informacji zawarłeś żęby dokładniej Ci odpowiedzieć.
Jak rozumiem kolega tworzy klienta w C# a ty tylko chcesz tak naprawdę postawić serwer REST do synchronizacji danych między graczami ? Jeśli tak to nodejs będzie zdecydowanie lepszy bo zużyje ci mniej pamięci i ogólnie jest lżejszy (bo do phpa musisz postawić serwer www), jak czytam: Cytat dopiero biorę się za jej tworzenie to przeniesienie kodu z php na nodejs nie będzie problemem. Bardziej mnie martwi wasze podejście: * użycie mysqla do odpytywania serwer co 1s tutaj polecam na dane, ktore mają się często zmieniąc jak pozycja gracza lub mapka gry użyć memcache lub nawet zwykłej zmiennej w nodejs (bo dopóki aplikacja odpalona na serwerze wtedy zmiena jest w pamięci i dostępna co requesty dla klienta) * odpytywanie co 1s beznadziejny pomysł, w sensie wykonuj requesty wtedy kiedy są potrzebne bo tylko zarżniesz serwer np wykonujesz ruch wtedy klient wykonuje request do serwera, przeciwnik ruszy się po planszy wykonaj request z serwera do klienta któremu pokarzesz że przeciwnik się rusza * Klient w c# i websockety ? LOL Websockety są stardartem w przeglądrakach do ciągłej komunikacji i powstały jako rozwinięcie koncepcji long polling, użyj zwykłych socketów mniej danych między pakietami będzie leciało => lepsze latency |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 12 Dołączył: 20.12.2009 Skąd: Siedlce Ostrzeżenie: (0%) ![]() ![]() |
Już lepiej tłumaczę i wraz z propozycjami zmieniam nieco założenia.
Do gry istnieją (będą) dwa klienty: przeglądarkowy i desktopowy. Z punktu widzenia serwera nie ma różnicy między nimi (między ich zapytaniami). Wszelkie dane gry będą znajdywać w memcache, które jest dostępne dla php i node.js Co 1min będzie zapis z memcache do mysql (backup #1) Co 4h będzie robiony dump mysql. (backup #2) Cytat biorę się za jej tworzenie Tu miałem na myśli stricte walki. Reszta jest na dość zaawansowanym poziomie. Oczywiście wraz z upływem czasu postaram się wszystko przepisać na node.js, aby nie mieszać silnika pomiędzy dwie technologie. 'websockety' do zły wybór nazwy przeze mnie, nie wiedziałem o różnicy. Zastosuję 'sockety' 'odpytywanie co 1s beznadziejny pomysł' Właśnie dla tego chcę przejść na node i komunikację dwustronną. Tą integrację node z php może jakoś przez fastcgi wykonać? Widziałem arty w necie, ale proszę o 'dość' stabilne rozwiązanie, najlepiej z przykładami. (najlepiej pojmuję na przykładach) Dzięki za zainteresowanie |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie będę się wypowiadał na temat samej gry i rozwiązań jako takich = bo szczerze dawno takich rzeczy nie robiłem a nieco się pozmieniało jeśli chodzi o techniki i technologie od czasu gdy ostatni raz coś działałem w takim temacie.
Znam nieco (no może nieco bardziej) natomiast node.js - z tego co ogólnie wiadomo jest on wręcz stworzony do takich zastosowań - mam jednak obawy co do połączenia PHP z NJS... Czemu chcesz to łączyć? NJS sam w sobie do obsługi warstwy API/komunikacji jest w pełni wystarczający - potrafi przetwarzać dane i wykorzystywać MC i MySQL - po co tu pchasz PHP, który wprowadzi IMO opóźnienia (bo będzie wywoływany pośrednio). Mogę być w błędzie bo nigdy tego nie porównywałem ale moim zdaniem struktura: API -> NodeJS / strona statyczna -> PHP będzie lepsza/szybsza/wydajniejsza od: API -> NodeJS -> PHP / strona statyczna -> PHP (przez stronę statyczną rozumiem generowanie HTML) A może źle to zrozumiałem? -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 12 Dołączył: 20.12.2009 Skąd: Siedlce Ostrzeżenie: (0%) ![]() ![]() |
Będę dążył do przepisania tego co mam w php, ale ważniejsze jest napisanie tego, co jeszcze nie jest gotowe.
Pokażę na pseudokodzie o co mi mniej więcej chodzi. (Jeśli chodzi o javascript to znam bdb, ale w node funkcjonuje on troszkę inaczej) Kod var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') var php = require('phpHandler'); app.listen(80); function handler (req, res) { //gra ma tylko jeden plik index, reszta wszystko już dynamicznie php.execute("index.php"); } io.sockets.on('connection', function (socket) { socket.emit('init', { initData: '<initData>' }); socket.on('walk', function (data, fn) { //w jakiś sposób trzeba przekazać te parametry do php var result = php.execute("extAPI.php", "a=walk&d="+data); fn(result) }); socket.on('innaFunc', function(data, fn){ //inna funkcja już napisana w js /** **/ fn(result); }); }); Oczywiście jest to schemat bardzo uproszczony. Zgłębiam się w tę technologię dla tego projektu, wcześniej nie miałem z nią do czynienia. Może polecicie też wygodne IDE dla node? (win/linux) Jeśli nie jest to możliwe będę musiał od razu napisać wszystko od nowa. Nic tak nie zdenerwuje ludzi jak oczekiwanie na nową wersję. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Architektura, gdzie przy każdej, najmniejszej akcji będziesz wywoływał skrypt PHP, który musi sobie wczytać cały silnik gry to jakieś nieporozumienie. Będzie to bardzo wolne i zasobożerne.
2. Jeżeli już musisz ten silnik mieć w PHP (bardzo słaby dobór platformy) powinieneś rozważyć utworzenie daemonu i komunikację z nim przez sockety. |
|
|
-arrtxp- |
![]()
Post
#7
|
Goście ![]() |
Ehe, musisz przemyśleć to jeszcze raz...
![]() Node.js... nie zrobisz tutaj tyle co w php, ale zrobisz to co niedasz rady w php. Rzecz ujmując to tylko odciebie zależy jak to wykorzystasz ![]() " Ponoć " margonem opiera się na serwerze w c++ i javascript, no idaję radę ![]() Mfo3 leci na nginx, php, memecache, javascript i daję radę. To poprostu tylko od Ciebie zależy ile serwer pociągnie. I smierdzi mi tu " danarroth " ;p Ten post edytował arrtxp 16.09.2013, 15:09:00 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 12 Dołączył: 20.12.2009 Skąd: Siedlce Ostrzeżenie: (0%) ![]() ![]() |
Jakie Danarroth, jakie Danarroth
![]() Zobaczymy co z tego wyjdzie. Postanowiłem, że zacznę wszystko od nowa. Jestem na etapie konfigurowania linux-a i pierwszych hello-world-ów. W sumie jeśli raz już się coś napisało, to wykonanie tego samego w innym języku (gdy mamy już rozpisaną całą strukturę plików/db i sposób działania) jest dość proste (jedynie monotonne). Ponowię tylko pytanie o IDE na linux-a. Do tej pory pisałem tylko w Win, a planuję w miarę możliwości przenosić się na Linuxa. W końcu po co na przemian wczytywać systemy, lepiej wszystko zrobić na jednym. |
|
|
-arrtxp- |
![]()
Post
#9
|
Goście ![]() |
Serwerujesz na własnym kompię ?
Wiesz, niema problemu nad przechodzeniem z windowsa na linuxa, gorzej z linuxa na windowsa ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie ma dedykowanego IDE dla nodejs, polecam poszukać w pluginach do netbeansa lub eclipsa. Jeśli chodzi o łączenie php z nodejs to ja polecam schemat taki:
* php będzie głównie odpalane przez CLI (z wiersza poleceń), w cronie, stwórz demona która raz na jakiś czas będzie odpalał się i sprawdzał memcached. I będzie zapisywał dane w mysqlu * nodejs będzie reagował eventami na zdarzenia websocketów => jeśli chcesz klienta przeglądarkowego to tutaj websockety, żeby nie dublować funkcjonalności możesz już i klienta c# też zostwić websockety. * nodejs będzie zapisywał dane współdzielone w memcached php jakiś tam częsciowy backup będzie wykonywał Jedna rada co do phpowej sesji to ustwa sobie handler na memcached oraz serializuj w jsonie dzięki temu będziesz miał do niej dostęp z poziomu nodejs w łatwy sposób. Nie korzystaj natomiast z FastCGI to nie do tego służy i tylko spowolni Ci serwa. Tak z ciekawości co to za projekt ? Ten post edytował R4D3K 16.09.2013, 18:45:18 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 12 Dołączył: 20.12.2009 Skąd: Siedlce Ostrzeżenie: (0%) ![]() ![]() |
Projekt zwie się Borderless Engine, a gra na nim powstająca to Danarroth
Zostaję przy konfiguracji: shared . . . . . . . . . . . . . . . . . . . . . . . . VPS main_page->game - - - sockets - - - siltaz+node.js (troszkę źle to obrazuję, ale przecież nie muszę zdradzać wszystkich schematów działania) Na VPS nie będzie nic prócz samego serwera w node, nie muszę uruchamiać webserva - prostsza konfiguracja. Znalazłem już wtyczkę do eclipse (nodeclipse), jak przebrnę przez errory to ocenię ![]() Dziękuję za odpowiedzi, można zamknąć lub zostawić dla potomnych. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.04.2025 - 23:37 |