Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Aktualizacja i zapis do bazy stanu serwerów Counter Strike
Forum PHP.pl > Forum > PHP
Michael2318
Witam!

Załóżmy, że mam bazę z adresami IP serwerów Counter Strike. Potrzebuję średnio co 20 minut aktualizować sobie informacje o każdym z tych serwerów i zapisywać to do bazy. Zastanawiam się jednak po pierwsze jakiej biblioteki użyć do wyciągania informacji o serwerach. Obecnie stosuję bibliotekę GameQ: http://gameq.sourceforge.net/
Póki co dla próby wyciągnąłem sobie informacje o jakimś tam serwerze w ten sposób:

  1. if (isset($server) && !empty($server) && isset($game) && !empty($game))
  2. {
  3. list($ip, $port) = explode(":", $server);
  4.  
  5. $gq = new GameQ();
  6. // dodajemy serwer
  7. $gq->addServer('serwer', array($game, $ip, $port));
  8. $gq->setOption('timeout', 200);
  9. $gq->setFilter('normalise');
  10. $gq->setFilter('sortplayers', 'gq_ping');
  11. $results = $gq->requestData();
  12.  
  13. if($results['serwer']['gq_hostname']=="")
  14. {
  15. echo 'serwer is offline';
  16. }
  17. else
  18. {
  19. foreach($results['serwer'] AS $jeden => $dwa)
  20. {
  21. if ( $jeden !== 'players' )
  22. {
  23. echo '$tab['.$jeden.'] => '.$dwa.'<br>';
  24. }
  25. else
  26. {
  27. $num = intval($results['serwer']['num_players'])-1;
  28.  
  29. for($i=0; $i <=$num; $i++)
  30. {
  31. echo ' '.$results['serwer'][$jeden][$i]['name'].'<br>';
  32. }
  33. }
  34. }
  35. }
  36.  
  37.  


I skrypt wyciąga naprawdę sporo informacji o serwerze, zapewne sam właściciel serwera nie wie tyle co ja mogę dzięki temu skryptowi wiedzieć o jego serwerze. Jednak wziąłem powyższy skrypt w pętlę for i wykonałem skrypt 24 razy, dostałem czas ponad 5 sekund i kilka ostatnich rekordów wyrzuciło mi jako "Serwer is offline", mimo tego, że cały czas sprawdzałem ten sam serwer. Dodatkowo przy zmianie wartości pętli z 24 na 25 już dostałem:

Cytat
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@mypage.xaa.pl and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


A przy wykonaniu pętli 23 razy, skrypt wykonuje się w pół sekundy. Nie wiem czemu jedno wykonanie w tą czy w tamtą robi tak olbrzymią rozbieżność czasową.

I teraz zastanawiam się:
a) czy ten skrypt jeśli chodzi o optymalność jest dobry? Może ktoś zna coś lepszego?
cool.gif jak w tym wypadku sprawdzić wszystkie serwery, mając ich w bazie ponad 1000? Czy sprawdzanie np. 20 serwerów za jednym wykonaniem takiego skryptu to będzie dobry pomysł?

Pozdrawiam! wink.gif
markuz
Użyj CRON-a i wykonuj sprawdzanie każdego serwera w odstępie czasowym (np. 10 sekund).
Michael2318
Tak też chcę zrobić, ale myślę czy nie lepiej sprwadzać właśnie na raz np. 20 serwerów i po tych 10 sekundach kolejną dwudziestke ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.