php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.03.2011, 19:31  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Verständnis non blocking stream

Hi,

ich möchte einen simplen REST-Client bauen. Der Client soll dabei möglichst wenig Zeit für einen Request brauchen. Auch die Rückgabe des Servers brauche ich nicht.

Deshalb kann ich ja theoretisch einfach den Code aus der Doku zu stream_socket_client verwenden:

PHP-Code:
<?php
$fp 
stream_socket_client("tcp://localhost:80"$errno$errstr30);
if (!
$fp) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
fwrite($fp"GET /server.php HTTP/1.0\r\nHost: localhost\r\nAccept: */*\r\n\r\n");
    
// while (!feof($fp)) { echo fgets($fp, 1024); }
    
fclose($fp);
}
Wie ihr seht, hab ich das Lesen der Antwort einfach auskommentiert. Funktioniert wunderbar. Auch wenn das Serverskript 3 Sekunden braucht, wartet der Client nicht.

Jetzt verstehe ich aber nicht ganz den Zusammenhang zu stream_set_blocking. Das scheint ja das gleiche zu bewirken. Aber wozu brauche ich das dann, wenn ich doch das Lesen auslassen kann?

Und dann gibts bei stream_socket_client auch noch den Flag STREAM_CLIENT_ASYNC_CONNECT. Was bewirkt der dann?

Viele Grüße,
Christoph
McSodbrenner ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.03.2011, 20:50  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von McSodbrenner Beitrag anzeigen
Jetzt verstehe ich aber nicht ganz den Zusammenhang zu stream_set_blocking. Das scheint ja das gleiche zu bewirken. Aber wozu brauche ich das dann, wenn ich doch das Lesen auslassen kann?
Gar nicht...

Ein Socket blockiert, wenn du lesen willst, aber der Server gar nichts sendet...im schlimmsten Fall bis zum Sankt Nimmerleinstag. Da du aber nicht liest, blockiert dein Socket auch nicht, ergo brauchst du auch kein non-blocking socket.

STREAM_CLIENT_ASYNC_CONNECT ist im Prinzip das gleiche, nur für den Verbindungsaufbau: Wenn der Server, den du versuchst zu erreichen, nicht verfügbar ist, blockiert das Socket (bis zum Timeout). Bei asynchronem Connect kehrt es sofort zu dir zurück, egal ob die Verbindung bereits aufgebaut werden konnte oder nicht (du musst dann VOR dem lesen/schreiben auf das Socket überprüfen, ob der Socket verbunden ist...)
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 12.03.2011, 23:40  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard

Ah, danke.
Wenn ich das richtig verstehe, macht dann ein non-blocking request nur Sinn, wenn man mehrere Requests absendet, richtig? Weil man dann mehrere gleichzeitig abarbeiten kann, oder? Und dann benutzt man am besten auch beide Funktionen, ja?
Gibt es noch andere Anwendungsfälle dafür?
McSodbrenner ist offline   Mit Zitat antworten
Alt 13.03.2011, 11:08  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von McSodbrenner Beitrag anzeigen
Ah, danke.
Wenn ich das richtig verstehe, macht dann ein non-blocking request nur Sinn, wenn man mehrere Requests absendet, richtig? Weil man dann mehrere gleichzeitig abarbeiten kann, oder?
Auf einem Socket kannst du trotzdem nur einen Request absetzen. Aber ja, um mehrere parallele Requests verarbeiten zu können legt man x non-blocking Sockets an und holt für jedes Socket die Daten nach und nach asynchron ab... quasi-gleichzeitig.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 13.03.2011, 13:49  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard

Danke!
McSodbrenner ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Shoutcast Stream über PHP ... Titel-Update? DJ_RhoxxZ PHP Tipps 2010 5 06.08.2010 14:00
fopen - failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden aniga_de PHP Tipps 2010 14 18.06.2010 19:26
Bilderupload: failed to open stream - ERROR Gamer PHP Tipps 2009 3 01.04.2009 21:58
[Erledigt] PHP -&gt; Ordner anlegen der sich auch beschreiben lässt?! Nightuser PHP Tipps 2008 13 30.06.2008 23:51
Warning: %v%v() [function.%v]: failed to open stream: FrozenFox PHP Tipps 2008 3 29.08.2007 19:54
Hilf bei Fehlersuche --> failed to open stream pit62 PHP Tipps 2006 13 22.06.2006 14:00
Poblem: fgetcsv(): 3 is not a valid stream resource pil PHP Tipps 2006 14 04.04.2006 09:11
Warning: fwrite(): supplied argument is not a valid stream Venom PHP Tipps 2007 27 15.12.2005 18:14
failed to open stream: Permission denied PHP Tipps 2005-2 4 14.09.2005 19:34
fopen failed to create stream PHP Tipps 2005-2 9 14.09.2005 15:20
failed to create stream PHP Tipps 2005-2 1 13.06.2005 08:11
PHP Flush stream PHP-Fortgeschrittene 23 24.05.2005 16:37
ShowIt_V1.8.14 PHP Tipps 2005 1 23.03.2005 19:13
frage zum arbeiten mit dateien PHP Tipps 2005 21 01.03.2005 13:22
Warning: getimagesize(): stream does not support seeking... PHP-Fortgeschrittene 1 27.09.2004 21:40

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
blocking stream, php non blocking, blocking non-blocking, php non blocking sockets, php fwrite non block, accept socket stream nonblocking, non blocking mode streams, stream_set_blocking wofür, php open stream non blocking, php nonblocking, non-blocking php, php \non blocking sockets\ lesen, php socket nonblocking 1024, php socket stream wozu, nonblocking socket prüfen, accept non blocking stream, php stream blocking, php non blocking request, blocking non blocking sockets, non blocking stream

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum