Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Aktualizacja i zapis do bazy stanu serwerów Counter Strike
Michael2318
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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?
(IMG:style_emoticons/default/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! (IMG:style_emoticons/default/wink.gif)

Ten post edytował Michael2318 18.03.2014, 13:22:15
Go to the top of the page
+Quote Post
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Użyj CRON-a i wykonuj sprawdzanie każdego serwera w odstępie czasowym (np. 10 sekund).
Go to the top of the page
+Quote Post
Michael2318
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 11:06