Timeout pri socket komunikacii – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Timeout pri socket komunikacii – PHP – Fórum – Programujte.comTimeout pri socket komunikacii – PHP – Fórum – Programujte.com

 

marioff0
Expert
15. 6. 2010   #1
-
0
-

dajte tomu mam principom podobny kod (toto je len ukazkovy):

function pripoj() {

$fp = @fsockopen("udp://123.45.67.89", 10123, $errno, $errstr, 2);
if (!$fp) { return FALSE; }
stream_set_timeout($fp, 2, 0);
stream_set_blocking($fp, TRUE);
$packet=komunikuj($fp);
@fclose($fp);
return $packet;
}

function komunikuj($fp) {
fwrite($fp, "nejaky code");
$packet=fread($fp, 4096);
return $packet;
}


v pripade ze server neodpovie do 2 sekund, potrebujem aby sa spojenie "zakillovalo", lenze teraz to funguje tak, ze na vacsine pripadov to funguje, ale na niektorych serveroch (najma ked realne bezia) sa caka na odpoved az do php timeoutu... serverov mam samozrejme viac, ktore v cykle kontrolujem, a ked sa narazi na takyto "problemy" server, bohuzial sa neskontroluju tie pod nim, pretoze sa vycerpa timeout a script skonci....

nema niekto skusenost (alebo vedomost) ako zabezpecit, aby sa spojenie ukoncilo vzdy a v kazdom pripade ked neodpovie server do urciteho casu???

dik

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
KIIV
~ Moderátor
+43
God of flame
15. 6. 2010   #2
-
0
-

taky muzes pouzit neblokujici rezim a sfouknout vsechny servery naraz..

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marioff0
Expert
15. 6. 2010   #3
-
0
-

pri neblokujucom rezime mi automaticky vrati -1 , ako keby ani necakalo na odpoved... bohuzial kod je obrovsky nato aby som ho tu daval... ide o stahovanie dat od hernych serverov cez protokol udp....

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
KIIV
~ Moderátor
+43
God of flame
15. 6. 2010   #4
-
0
-

To marioff : ono taky neceka.. to musis osefovat sam, aby sis testoval jednou za cas jestli neprisly data..
neblokujici znamena to, ze muzes mezi tim delat neco dalsiho a ne bejt zablokovanej cekanim...
pripadne jeste blokujici v kombinaci s vlaknama.. ale jestli to php umi :)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marioff0
Expert
15. 6. 2010   #5
-
0
-

To KIIV : dik, budem to musiet ale prepisat do http://www.php.net/manual/en/ref.sockets.php ,

inak to blokovanie mi ani nevadi len to ze sa to momentalne sprava dost dementne (cez fsockopen, fwrite, fopen...), myslim tu ignoraciu timeoutu

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
marioff0
Expert
15. 6. 2010   #6
-
0
-

daco som precital o non-blocking, z toho mi vyslo toto nakoniec:


$adresy[]=array("ip"=>"123.45.67.89","port"=>"12233"); // ...atd mnozstvo adries


foreach($adresy as $kluc=>$obsah) {
$mySocket[$kluc] = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

if($mySocket[$kluc] === FALSE) {
echo 'chyba: '.socket_strerror(socket_last_error())."<br>";
exit(1);
}

$otazka = "bla bla";
if (!socket_sendto($mySocket[$klucik],$otazka,strlen($otazka),0,$obsah['ip'],$obsah['port'])) {
echo 'chyba: '.socket_strerror(socket_last_error())."<br>"; }

socket_set_nonblock($mySocket[$kluc]);
}

sleep(2); // zatial nemam co robit dalej :)

foreach($adresy as $kluc=>$obsah) {
@socket_recv($mySocket[$kluc], $data[$kluc], 4096, 0);
echo '<b>'.$klucik.'</b> --- '.$data[$kluc].'<br><br>';
}


je to funkcne, kludne teraz ziskam desiatky odpovedi za 2 sekundy :) , len ci som to pochopil dobre... ano??

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

Podobná vlákna

Mysql_connect timeout — založil Anonymní uživatel

Timeout a udpateDisplay — založil vlado0991

Timeout operace — založil Gibon

TCP Timeout — založil Hunty

JAVA UDP timeout — založil Honza

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý