Autor Zpráva
leorond
Profil
Ahoj, na VPS mi funguje aplikace která využívá port 55903 na localhostu a já bych potřeboval kontrolovat zda je aplikace online aby v případě pádu aplikace nebo odstavení jsem mohl na webových stránkách vypsat status OFFLINE.

Vytvořil jsem si proto script ale ten se stále připojuje dokola a zapříčiní pád aplikace, při tom se ukazuje v logách aplikace tento zápis

error-L1 : CloseClient INVALID_SOCKET
12:28:51 (6587)logout :  [127.0.0.1]
12:28:51 Response error after connection causes conclusion (6587)()()(127.0.0.1)
error-L1 : CloseClient INVALID_SOCKET
12:28:51 (6588)logout :  [127.0.0.1]

Můj script

$GameServer['check']    =    "1";

if($check    =    fsockopen('127.0.0.1',    '55903',    $ERROR_NO,$ERROR_STR,    (float)0.5) and $GameServer['check']    ==    1) 
{ 
    fclose($check); 
    $GS_Status    =    "<font color='#A0FFA0'><b>ONLINE</b></font>";
}
else    
{ 
    $GS_Status    =    "<font color='red'><b>OFFLINE</b></font>";
}

Nevíte prosím kde by mohla být chyba?
Davex
Profil
leorond:
Nebylo by lepší na VPS nastavit monitorování té aplikace pomocí monit, aby se po pádu zrestartovala a nebylo nutné zobrazovat, že je nedostupná?
leorond
Profil
To by určitě šlo ale pouze v situaci kdy by server padl a od toho mám auto start který pokud zjistí že server není aktivní tak ho restartuje.

Ale pokud chci ověřovat zda je server ONLINE a potřebuji to dát uživatelům vědět tak je pro mne jednoduší když se na webu zobrazí rudě OFFLINE než každému zvlášť odepisovat důvod proč se nelze připojit k serveru.
Jelikož lidi neradi čtou novinky a informace.
leorond
Profil
Ještě bych chtěl dodat že script funguje dobře ale on mi normálně zablokuje port a nikdo se k aplikaci nedostane.


Zkusil jsem ho nahradit funkcí ale je to úplně stejné.

function ErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
}  

function CheckPortStatus($Ip, $Port, $Timeout = 0.5)
{
  set_error_handler('ErrorHandler'); // Disable failed connection warning
  //error_reporting(0);
  if($Fp1 = fsockopen($Ip, $Port, $ERROR_NO, $ERROR_STR, (float)$Timeout))
  {
    fclose($Fp1);
    return(TRUE);
  } else
  {
    //echo($ERROR_NO.','.$ERROR_STR);
    return(FALSE);
  }
  restore_error_handler();
}

if(CheckPortStatus('localhost', 55903))
    {
        echo('Online'); 
    }
    else 
    {
        echo('Offline');
    }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: