Pomoc w uruchomieniu serwera

0

Cześć :)
Poszukuję osoby, która uruchomi dla mnie serwer node.js na serwerze lokalnym xampp.
Wszystko powinno działać, gra online ( bo tego dotyczy ten temat ) działała na dedyku- po przeniesieniu na xampp nie potrafię uruchomić serwera node.js

Co zrobiłem?

Mapa gy jest już uruchomiona, cały silnik gry działa ale niestety- odświeżanie mapki i np. chat nie odświeża się- wszystko połączone express i express.io ( możliwe ze nie do końca prawidłowo ).

Po uruchomieniu z linii komend widzę komunikat że serwer nasłuchuje na porcie 3000 ( czyli teoretycznie działa node.js )- ale mam metodę wysyłającą tablicę z danymi sendToNodeJS ale system zwraca błąd - potrzebuję pomocy :)

/* send data to nodeJS */

    public function sendReqToNodeJS($arrayData, $urlData = 'http://localhost:3000/message')
    {
        // set password 
        $arrayData['password'] = 'sdfgsdfgs7df564erwfsad';

        if (!isset($_SESSION['cookieFile'])) $_SESSION['cookieFile'] = tempnam (BASE_DIR."/tmp", "connect.sid");
        $ch = curl_init($urlData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_NOBODY, FALSE);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arrayData));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
          'Content-Type: application/json',
          'Content-Length: ' . strlen(json_encode($arrayData)), 'Expect:')
        );
        $res = curl_exec($ch);

        if (substr($res, 0, 12) != 'HTTP/1.1 200')
        {
            debug::saveLog(get_class($this).': '.date('H:i:s d-m-Y').' : Linia 50 - nodeJS zwrócił stronę błędu '.var_export($arrayData, true).', zwrotka='.var_export($ch, true));
        }
    }

A błąd jaki otrzymuje to:

helper: 00:45:01 22-06-2022 : Linia 50 - nodeJS zwrócił stronę błędu array (
  'chanName' => 'worldchat4',
  'message' => 'zczczccscs',
  'info' => 
  array (
    'chanType' => 'world',
    'msgDate' => '22/06/2022 00:45:00',
    'nationID' => '1',
    'login' => 'miccom',
    'playerID' => '12',
  ),
  'password' => 'sdfgsdfgs7df564erwfsad',
), zwrotka=CurlHandle::__set_state(array(
))

Gra była uruchomiona na głównym adresie- node.js nasłuchuje na kanale 3000, teraz mam localhost i domena w vshosts to localhost:8020 ... możliwe że tutaj jest problem że nie jest to klasyczny localhost ale poddaję się :)
Szukam pomocy, również jako zlecenie :)

0

Ale czemu tu jest PHP (to jest pisane jednocześnie w Node.js jak i PHP?)?

A błąd jaki otrzymuje to:
helper: 00:45:01 22-06-2022 : Linia 50 - nodeJS zwrócił stronę błędu array (
'chanName' => 'worldchat4',
'message' => 'zczczccscs',

Czy możesz spróbować dotrzeć do prawdziwego błędu w Node.js? Bo to wygląda jak już przemielony przez aplikację customowy komunikat, a nie faktyczny błąd.

if (substr($res, 0, 12) != 'HTTP/1.1 200')

ja bym tutaj zrobił echo $res, bo ten if mi się nie podoba. Być może wcale tam błędu nie ma, a po prostu nagłówek się zaczyna inaczej? No chyba, że specyfikacja HTTP to wymusza, nie wiem w sumie, dawno nie pisałem z palca nagłówków HTTP.

1

express.io to jakas mega archaiczna biblioteka nie aktualizowana od 9 lat. To twój projekt, czy pobrałeś jakiś silnik gry przeglądarkowej?

0
szafran98 napisał(a):

express.io to jakas mega archaiczna biblioteka nie aktualizowana od 9 lat. To twój projekt, czy pobrałeś jakiś silnik gry przeglądarkowej?

Cały silnik gry to moje autorskie rozwiązanie, natomiast node.js zajmował się mój znajomy- ale że projekt zamknąłem 3 lata temu- niestety nasz kontakt się urwał :(

LukeJL napisał(a):

Ale czemu tu jest PHP (to jest pisane jednocześnie w Node.js jak i PHP?)?

A błąd jaki otrzymuje to:
helper: 00:45:01 22-06-2022 : Linia 50 - nodeJS zwrócił stronę błędu array (
'chanName' => 'worldchat4',
'message' => 'zczczccscs',

Czy możesz spróbować dotrzeć do prawdziwego błędu w Node.js? Bo to wygląda jak już przemielony przez aplikację customowy komunikat, a nie faktyczny błąd.

if (substr($res, 0, 12) != 'HTTP/1.1 200')

ja bym tutaj zrobił echo $res, bo ten if mi się nie podoba. Być może wcale tam błędu nie ma, a po prostu nagłówek się zaczyna inaczej? No chyba, że specyfikacja HTTP to wymusza, nie wiem w sumie, dawno nie pisałem z palca nagłówków HTTP.

Tak, php wykonuje skomplikowane obliczenia ( np. battleEngine, czy ruch jednostki, buduje tablicę z widocznymi na mapie jednostkami itd. ) i wysyła gotowe elementy do zaktualizowania przez node.js

Zrobiłem zwrotke jako $res ( zwrotka='.var_export($res, true)); ) i otrzymałem:

helper: 19:27:10 23-06-2022 : Linia 50 - nodeJS zwrócił stronę błędu array (
'chanName' => 'worldchat4',
'message' => 'scscsacasc',
'info' =>
array (
'chanType' => 'world',
'msgDate' => '23/06/2022 19:27:08',
'nationID' => '1',
'login' => 'miccom',
'playerID' => '12',
),
'password' => 'sdfgsdfgs7df564erwfsad',
), zwrotka=false

0

Oki, ruszyłem nieco dalej.
Mój kod w pliku app.js:

```js
app.post('/game', function(request, response) {
        // err is probably an invalid json error
        console.log(request.body);
        if (request.body.password !== serverKey) {
            response.statusCode = 500;
            return response.end("NO U");
        }

       for(var i in request.body.chanData) {
          app.io.room(request.body.chanData[i].chanName).broadcast(request.body.activity, request.body.chanData[i].data);
       }
        
    response.writeHead(200);
    response.end('Dzi� dybry');
```
});

A otrzymuję taką zwrotkę:

undefined
TypeError: Cannot read property 'password' of undefined
    at C:\xampp\htdocs\wichry-wojny\app.js:103:26

Jeśli wyświetlę console.log(request);

To widzę ładny raport:

 prependListener: [Function: socketListenerWrap],
    _paused: false,
    _httpMessage: ServerResponse {
      _events: [Object: null prototype],
      _eventsCount: 1,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: false,
      chunkedEncoding: false,
      shouldKeepAlive: true,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: true,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: null,
      _hasBody: true,
      _trailer: '',
      finished: false,
      _headerSent: false,
      socket: [Circular *1],
      _header: null,
      _keepAliveTimeout: 5000,
      _onPendingData: [Function: bound updateOutgoingData],
      _sent100: false,
      _expect_continue: false,
      req: [Circular *2],
      locals: [Object: null prototype] {},
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    [Symbol(async_id_symbol)]: 18,
    [Symbol(kHandle)]: TCP {
      reading: true,
      onconnection: null,
      _consumed: true,
      [Symbol(owner_symbol)]: [Circular *1]
    },
    [Symbol(kSetNoDelay)]: false,
    [Symbol(lastWriteQueueSize)]: 0,
    [Symbol(timeout)]: null,
    [Symbol(kBuffer)]: null,
    [Symbol(kBufferCb)]: null,
    [Symbol(kBufferGen)]: null,
    [Symbol(kCapture)]: false,
    [Symbol(kBytesRead)]: 0,
    [Symbol(kBytesWritten)]: 0,
    [Symbol(RequestTimeout)]: undefined
  },
  httpVersionMajor: 1,
  httpVersionMinor: 1,
  httpVersion: '1.1',
  complete: false,
  headers: {
    host: 'localhost:3000',
    accept: '*/*',
    'content-type': 'application/json',
    'content-length': '1524'
  },
  rawHeaders: [
    'Host',
    'localhost:3000',
    'Accept',
    '*/*',
    'Content-Type',
    'application/json',
    'Content-Length',
    '1524'
  ],
0

TypeError: Cannot read property 'password' of undefined

to pewnie dotyczy tej linijki if (request.body.password !== serverKey)?
Czyli request.body jest undefined. W Express pamiętam, że żeby mieć dostęp do body, trzeba było dodatkowego middleware użyć.

Pytanie, która to wersja Expressa, bo w każdej wersji Expressa się robiło wszystko totalnie inaczej jeśli chodzi o te wszystkie middleware'y.

Plus jeśli apka korzysta z jakiejś porzuconej biblioteki Express.io (nie mylić z Express, z tego co widzę to jest jakaś nakładka i tak jak @szafran98 napisał, nieaktualizowana od lat)
https://www.npmjs.com/package/express.io
to też będzie dodatkowa zabawa.

0
LukeJL napisał(a):

TypeError: Cannot read property 'password' of undefined

to pewnie dotyczy tej linijki if (request.body.password !== serverKey)?
Czyli request.body jest undefined. W Express pamiętam, że żeby mieć dostęp do body, trzeba było dodatkowego middleware użyć.

Pytanie, która to wersja Expressa, bo w każdej wersji Expressa się robiło wszystko totalnie inaczej jeśli chodzi o te wszystkie middleware'y.

Plus jeśli apka korzysta z jakiejś porzuconej biblioteki Express.io (nie mylić z Express, z tego co widzę to jest jakaś nakładka i tak jak @szafran98 napisał, nieaktualizowana od lat)
https://www.npmjs.com/package/express.io
to też będzie dodatkowa zabawa.

Tak, doskonale to rozpracowałeś :)

Sprawa wygląd tak, że już załadowałem sobie parser body i już mam te dane.

Teraz widzę takie dane:
sdfgsdfgs7df564erwfsad
chanName = unitMove
chanName = unitMove

czyli ten password systemowy i nazwę kanału.

teraz moja metoda wygląda tak:

app.post('/game', jsonParser, function(request, response) {
        // err is probably an invalid json error
        console.log(request.body);
        if (request.body.password !== serverKey) {
            response.statusCode = 500;
            return response.end("NO U");
        }

       for(var i in request.body.chanData) {
          app.io.room(request.body.chanData[i].chanName).broadcast(request.body.activity, request.body.chanData[i].data);
       }
        
    response.writeHead(200);
    response.end('Dzi� dybry');
});

Po wykonaniu akcji otrzymuję z kolei błąd:

{
  activity: 'unitMove',
  chanData: [
    { chanName: 'worldmap4nation1', data: [Object] },
    { chanName: 'worldmap4nation2', data: [Object] }
  ],
  password: 'sdfgsdfgs7df564erwfsad'
}
TypeError: Cannot read property 'room' of undefined
0

czyli zakładając, że błąd jest w tej linii:

app.io.room(request.body.chanData[i].chanName).broadcast(request.body.activity, request.body.chanData[i].data)

to app.io jest undefined. io to chyba właściwość z tej biblioteki Express.io:
https://www.npmjs.com/package/express.io
może ona nie jest tam właściwie zainicjalizowana?

0
LukeJL napisał(a):

czyli zakładając, że błąd jest w tej linii:

app.io.room(request.body.chanData[i].chanName).broadcast(request.body.activity, request.body.chanData[i].data)

to app.io jest undefined. io to chyba właściwość z tej biblioteki Express.io:
https://www.npmjs.com/package/express.io
może ona nie jest tam właściwie zainicjalizowana?

Podmieniłem express na express.io i otrzymuję błąd:

Error: Cannot find module 'express/node_modules/connect'
Require stack:

  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\lib\index.coffee
  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\switch.js
  • C:\xampp\htdocs\wichry-wojny\app.js

Doinstalowałem connect- bez efektu

0

Podmieniłem express na express.io i otrzymuję błąd:

A to się da tak podmieniać? Z Expressa korzystałem, z Express.io nie i cholera wie, jak to działa (plus Express miał różne wersje, i w każdej z wersji inaczej się go używało)
Chociaż Express.io pod spodem korzysta z Expressa, czyli nie jest to zamiennik, tylko raczej wrapper:
https://github.com/techpines/express.io/blob/master/lib/index.coffee

express = require 'express'

No i jak go podmieniłeś dokładnie?

Ja bym cofnął te zmiany oraz pokasował folder node_modules, a później zrobił npm install.

0
miccom napisał(a):

Podmieniłem express na express.io i otrzymuję błąd:

Error: Cannot find module 'express/node_modules/connect'
Require stack:

  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\lib\index.coffee
  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\switch.js
  • C:\xampp\htdocs\wichry-wojny\app.js

Doinstalowałem connect- bez efektu

Wątpię, żeby najnowsza wersja expressa była kompatybilna z biblioteką wydaną 9 lat temu o której wszyscy zapomnieli (ma po 200 pobrań na npm). Pozostałe biblioteki używane w projekcie pewnie też mogą być przestarzałe.

Jeśli chcesz uruchomić projekt bez żadnych zmian w kodzie to na Twoim miejscu próbowałbym sprawdzić starsze wersje node.js (https://nodejs.org/en/download/releases/). Teraz jest zalecana wersja v16, więc musiałbyś się cofnąć o kilka lat i poszukać tego wydania z którego korzystaliście kilka lat temu. Bo oprócz zmiany w samej bibliotece trzeba mieć też na uwadze zmiany w silniku, nie jestem pewien, czy wszystkie zmiany wprowadzone od tamtego czasu w node.js były kompatybilne wstecz i w tym przypadku uda się odpalić to w nowszych wersjach .

Drugi sposób to przepisanie tego od nowa, zachowując wszystkie funkcjonalności. Myślę, że jakbyś skonfigurował nowy projekt, zainstalował najnowszą wersje expressa, zaktualizował pozostale biblioteki używane w projekcie to z pomocą dokumentacji + starego kodu, który Ci został dużo szybciej byś to przerobił niż teraz zmieniając losowe linijki w kodzie z nadzieją, że zadziała.

I ewentualnie trzeci sposób, powiedziałeś, że znasz PHP to przepisz wszystko na pehapa i olej node.

0
Xarviel napisał(a):
miccom napisał(a):

Podmieniłem express na express.io i otrzymuję błąd:

Error: Cannot find module 'express/node_modules/connect'
Require stack:

  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\lib\index.coffee
  • C:\xampp\htdocs\wichry-wojny\node_modules\express.io\switch.js
  • C:\xampp\htdocs\wichry-wojny\app.js

Doinstalowałem connect- bez efektu

Wątpię, żeby najnowsza wersja expressa była kompatybilna z biblioteką wydaną 9 lat temu o której wszyscy zapomnieli (ma po 200 pobrań na npm). Pozostałe biblioteki używane w projekcie pewnie też mogą być przestarzałe.

Jeśli chcesz uruchomić projekt bez żadnych zmian w kodzie to na Twoim miejscu próbowałbym sprawdzić starsze wersje node.js (https://nodejs.org/en/download/releases/). Teraz jest zalecana wersja v16, więc musiałbyś się cofnąć o kilka lat i poszukać tego wydania z którego korzystaliście kilka lat temu. Bo oprócz zmiany w samej bibliotece trzeba mieć też na uwadze zmiany w silniku, nie jestem pewien, czy wszystkie zmiany wprowadzone od tamtego czasu w node.js były kompatybilne wstecz i w tym przypadku uda się odpalić to w nowszych wersjach .

Drugi sposób to przepisanie tego od nowa, zachowując wszystkie funkcjonalności. Myślę, że jakbyś skonfigurował nowy projekt, zainstalował najnowszą wersje expressa, zaktualizował pozostale biblioteki używane w projekcie to z pomocą dokumentacji + starego kodu, który Ci został dużo szybciej byś to przerobił niż teraz zmieniając losowe linijki w kodzie z nadzieją, że zadziała.

I ewentualnie trzeci sposób, powiedziałeś, że znasz PHP to przepisz wszystko na pehapa i olej node.

Wiesz, metodę wysyłającą dane do node.js mam- czy chcę używać starych kodów node.js - nie.
Nie dysponuję taką wiedzą i umiejętnościami aby stawiać wszystko od zera :(
Chętnie zleciłbym to zadanie osobom które znają nodejs

Postawiłem sobie na laravel chat z wykorzystaniem node.js i działa ślicznie- chyba będę musiał to przerobić- boję się tego- generalnie miałem plan taki: aby uruchomić grę na tym co było- i potem przepinać poszczególne elementy zachowując działanie :)

Mój plan się chyba nie uda- choć czuję że to cos prostego. Projekt był zamknięty 5 lat temu, 3 lata temu namierzyłem tego drugiego programistę który zajmował się tym node.js i on to uruchomił w godzinę :) Gra chodziła na dedyku ale znowu zamknąłem serwer- i kontakt z programistą się urwał.

Przez to czuję że tu nie trzeba przerabiać wszystkiego- tzn. należy to zrobić dla polepszenia kodu- ale można uruchomić to na środowisku które działało np. 4 lata temu.

2
miccom napisał(a):

Mój plan się chyba nie uda- choć czuję że to cos prostego. Projekt był zamknięty 5 lat temu, 3 lata temu namierzyłem tego drugiego programistę który zajmował się tym node.js i on to uruchomił w godzinę :) Gra chodziła na dedyku ale znowu zamknąłem serwer- i kontakt z programistą się urwał.

Gdybyś znalazł jakiej wersji node.js wtedy używaliście i ją zainstalował to tak na solidne 50% (zadziała, lub nie zadziała :D), odpaliłoby się bez żadnych zmian w kodzie

https://nodejs.org/en/download/releases/

Przechwytywanie.JPG

Skoro projekt był tworzony jakieś 5 lat temu to oprócz zmian w bibliotekach express.io na express itd, trzeba uwzględnić zmiany w silniku. Coś zostało dodane, coś zostało zmienione, mogła powstać jakaś zmiana niekompatybilna wstecz itd. Strzelam, ze wtedy to działalo na wersji 7/8/9 (?), a teraz jest wersja 18.4.0, więc doszło mnóstwo zmian.

0

Tak czy siak, poszukuję osoby która zechciałaby mi pomóc uruchomić grę online :)
www.wichry-wojny.eu

Na tym adresie stoi gra, w zasadzie wszystko działa poza odświeżaniem ruchu jednostek i innych elementów interfejsu obsługiwanych przez node.js, nie działa tez kilka elementów poza node.js ale to jest związane z przejściem z php7.3 na php8 i ustawieniem strict :)
Szukam wsparcia :)

0

Napisałem na priv w tym temacie. Znam co najmniej kilku developerów, którzy mogliby pomóc w tym temacie.

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