Datuve :: Forums :: Arhīvs :: Kā labāk nopingot serverus ar PHP palīdzību?

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 94

Reģistrētie lietotāji online: 0

Viesi online: 94

Datuve.lv video
Top.LV

Kā labāk nopingot serverus ar PHP palīdzību?

Ievietoja: malinens @ 2008.08.23 22:00  

Ir šāds koda gabals un tādā veidā ar foreach es apstrādāju apmēram 100 serverus, bet tas sankāk ļoti lēni. Ar šo skriptu es pārbaudu vai uz tās IP adreses ir ieslēgts spēļu serveris.

$telnet=@fsockopen($ip,$ports,$errno,$errstr,5);
if (!$telnet) {
$online="ir onlainaa";
             }
 else
    {
$online="nav onlainaa";
    }

Varbūt ir kāds efektīvāks veids?

Komentāri:

#1 .... @ 2008.08.23 22:41

Tu taču to nedari uz katru lapas pieprasījumu?
Taisi atsevišķu skriptu, kas pārbauda un laid to automātiski(cron, sheduled tasks) ik pēc laika un rezultātus kaut kur pieglabā. Lapā parādi tikai šo pieglabāto informāciju.

#2 mefisto @ 2008.08.23 22:46

nez. tur diezko daudz pasā kodā es neredzu ko labot.
varbū vienīgi 5 sekunžu timeouts ir nedaudz overkills.

Tu tam pieiet vari no citas puses.
Es tava vietā uzliktu divus scriptus conttab'ā (katrai OS līdzīga fiška ir .. izgooglēsi). Pirmais skripts check_online_servers.php palaižas vienreiz minūtē (jā zinu ka ja visi nebūs online sanāks pārklāšanās .. turpini lasīt)  un otru  check_offline_servers.php, kas palaižas ik pēc 10 minūtēm.

Tālāk tev ir datubāze kas satur servera nosaumu, severa adresi un statusu (1 online , 0 offline) . Pirmais scripts iet cauri visiem ar statusus 1, otrais - visiem ar 0.

Vēl tev vajag divus failus:  online_script.pid un offline_script.pid

php tev ir jāuzraksta apmēram šāds kods (slinkums rakstīt īstu kodu , pietiks a pseido) :

ja ( online_script.pid satur 0 ) sākt
   online_script.pid ierakstīt 1

   piespēgties DB
   no DB paprasīt visus kur status = 1
   katram rezultātam no visiem rezltātiem sākt

         atvēt soketu rezultātu
         izdevās ? => nolasīt datus
         neizdevās ? => atzīmēt statusu = 0

   beigt
   aizvērt DB

   online_script.pid ierakstīt 0
beigt

Nu kaut kā šitā.

#3 malinens @ 2008.08.24 02:39

skripts jau tiek laists katru minūti (caur CRON)
EDIT: ar 1 sek. uzreiz lieta raitāk aizgāja :) vai ieksh PHP nevar uzlikt vērtību, piemēram, 0.5 nevis 1? Jo tiek pingotas IP adreses, kas atrodas Latvijā...

#4 mefisto @ 2008.08.24 02:43

http://lv2.php.net/manual/en/function.fsockopen.php
resource fsockopen (
   string $host [, int $port [, int &$errno [, string &$errstr [, float $timeout ]]]]
)

KA tu tiešām nezini kas ir http://php.net ?

#5 BlackHalt @ 2008.08.24 12:50

Varbūt noder:

http://lv.php.net/manual/en/function.stream-set-timeout.php

TB Tu vispār vari nelikt to timeout tam fsockopen.

#6 malinens @ 2008.08.24 16:04

mefisto, es tieshi runaaju par to $timeout- vai tas var buut, piemeeram 0.005? :)
cik es sapratu, tad nu galiigi nepatika nevienam dizaina augsha.
kaa patiik jaunais koncepts dizaina virsdaļai?

#7 mefisto @ 2008.08.24 16:18

Par timeout .. em .. ja tu nezini ko nozīmē 'float' , tad tev nevajadzētu vispār ap mājaslapām grābstīties.

Ja godīgi? Tā lapa izskatās drausmīgi.
Es pat nezinu ko tur var labot. Ja tas būtu zirgs, es ieteiktu to nošaut.