php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.08.2008, 11:57  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard [Erledigt] Langsame Socket-Kommunikation via PHP

Hallo zusammen,

bei Tests des Release 1.7-RC2 des Adventure PHP Frameworks habe ich festgestellt, dass das Laden von XML-Inhalten via Socket erheblich länger dauert, als ein Aufruf der Ressource via Browser. Auf meiner lokalen Entwicklungsumgebung (WinXPSP3,Apache2.0.x,PHP5.2.x) führt die Abfrage zum Timeout (PHP max_execution_time), auf meiner LINUX-Testmaschine (Fedora 9,Apache2.0.x,PHP5.2.x) wird die Seite nach 160s angezeigt.

Zum konkreten Code, der IMHO das Problem darstellt. In einem DocumentController lese ich per

PHP-Code:
$Socket fsockopen($Host,80,$errno,$errstr,10);

$Query 'GET '.$Query.' HTTP/1.0'.PHP_EOL;
$Query .= 'User-Agent: APF weather module'.PHP_EOL;
$Query .= 'Accept: */*'.PHP_EOL;
$Query .= 'Host: '.$Host.PHP_EOL;
$Query .= 'Connection: Keep-Alive'.PHP_EOL.PHP_EOL;
fwrite($Socket,$Query);

$Response = (string)'';
while(!
feof($Socket)){
   
$Response .= fgets($Socket128);
}

fclose($Socket); 
die Inhalte von einer Socket-Verbindung. Als Ergebnis erwarte ich ein XML, das mir die aktuellen Wetter-Meldungen anzeigt. Quelle in den Tests ist Wetter News von wetter.com. Die Variablen enthalten folgende Inhalte (zum Nachvollziehen):
  • $Host: feeds.feedburner.com
  • $Query: /wettercom/rss
Rufe ich die URL per Browser auf, so wird das XML innerhalb von 200ms ausgeliefert, mit der oben genannten Methode benötige ich dafür 160s. Hat irgendjemand eine Idee, warum ein so krasser Zeitunterschied zwischen Aufruf im Browser und per Socket-Kommunikation besteht?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 15.08.2008, 14:05  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Hallo dr.e,

Ich habe das ganze jetzt auch mal ausprobiert bei meiner Kiste (XP SP2) und es führt mit obigen Code auch zu einem Timeout.

Ändere ich jedoch die Zeile:
PHP-Code:
$Query .= 'Connection: Keep-Alive'.PHP_EOL.PHP_EOL
in
PHP-Code:
$Query .= 'Connection: close' PHP_EOL.PHP_EOL
Dauert der Zugriff nur 0.446943044662 Sekunden und ich erhalte eine XML mit Allen Header Informationen

Vielleicht hilft dir das ja weiter...
__________________
Mfg Tomtaz
"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."
tomtaz ist offline   Mit Zitat antworten
Alt 15.08.2008, 14:08  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Das wird am Keep-Alive liegen.
Du musst das Transfer-Encoding (Thema Chunk-Encoding) beachten und dann die jeweils angebene Menge Daten abholen.

Was passiert, wenn Du das Dokument testhalber per url wrapper lädst?
PHP-Code:
$fp fopen('http://....'$rb);
// $meta = stream_get_meta_data($fp);
$content stream_get_contents($fp); 
ZUsätzliche Header kannst Du übrigens auch über die stream-api setzen und dann file_get_contents o.ä. verwenden.

edit: zu langsam.
Aber auch wenn man Connection:close angibt, gibt es (gab es zumindest) Webserver, die das Socket nicht geschlossen haben.
David ist offline   Mit Zitat antworten
Alt 15.08.2008, 16:23  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo ihr beiden,

danke für den Hinweis mit Connection: close. Das hatte ich zu Anfangs auch, nur hat mir der Server dann ein leeres Dokument geschickt. Nun scheint mein Gegenüber jedoch wohlgesonnen zu sein und die Methode liefert brav das XML zurück.

Die Methode über fopen-Wrappers wollte ich deshalb nicht einsetzen, da diese auf diversen Server deaktiviert sind. Falls das so ist, bleibt einzig die Möglichkeit direkte Socket-Verbindungen zu verwenden. Ein einfaches

PHP-Code:
return file_get_contents('feeds.feedburner.com/wettercom/rss'); 
funktioniert aber natürlich auch.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. 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
Kommunikation zwischen IFRAME und Hauptseite R4v3r HTML, Usability und Barrierefreiheit 1 02.04.2007 13:57
PHP, Socket und Threads Manuchau PHP-Fortgeschrittene 1 25.08.2006 10:38
Socket abhören PHP Tipps 2006 1 21.05.2006 20:19
PHP Socket Programmierung Broadcast PHP-Fortgeschrittene 19 01.05.2006 21:15
Socket Client schnurzli PHP Tipps 2006 9 09.03.2006 20:49
[Erledigt] MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
Can't connect to local MySQL server through socket zcmaster Datenbanken 0 17.02.2006 11:48
Can't connect to local MySQL server through socket scooter Datenbanken 1 15.01.2006 15:22
[Erledigt] Can't connect to local MySQL server through socket Datenbanken 7 25.11.2005 15:35
fgetc auf Socket = hänger obwohl Daten bereit stehen HStev PHP-Fortgeschrittene 12 26.05.2005 21:31
Socket error Eddaholzbein PHP Tipps 2005 1 25.04.2005 13:49
[Erledigt] Kommunikation zwischen Objekten - Wie geht es richtig? PHP Tipps 2005 9 11.04.2005 00:57
[Erledigt] Problem: Can't connect to local MySQL server through socket Datenbanken 3 01.03.2005 18:51
Socket Function in Php 5 aktivieren! Finkman PHP Tipps 2004 1 10.08.2004 16:18
socket tutorial? Eddaholzbein PHP Tipps 2004 9 09.07.2004 15:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php socket tutorial, php socket kommunikation, socket verbindung langsam, socket kommunikation mit php, php socketverbindung, php socket verbindung langsam, php socket keep alive, php socket keep-alive, php server kommunikation, socket verbindung langsam php, php fwrite langsam, socket fwrite langsam, php socket programierung, connection keep-alive langsam, was bedeutet xmlsocket connection closed bei icq, xml sockket connection closed bei icq, php kommunikation per socket, mit php script kommunizieren socket, wetter.com socket, php socket verbindung

Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 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