php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 27-12-2008, 09:48
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard mehrere Script-Instanzen von einem Client(-programm) parallel ablaufen lassen

Bekanntlich läuft normalerweise jedes php-Script pro Aufruf in der Serverumgebung (bei mir im Apache2) als eine Art eigenständige Instanz des betreffenden php-Scripts, ich bezeichne im folgenden also mal einen eigenständigen Scriptdurchlauf als Script-Instanz.

Verschiedene Script-Instanzen eines Scripts können normalerweise zeitlich parallel ablaufen.
Kommen allerdings die Scriptaufrufe vom gleichen Client (z.B. gleiche IP und gleiches Clientprogramm), funktioniert der parallele Aufruf bei mir nicht mehr, wie erwartet oder zumindest von mir erhofft.

Beide Script-Instanzen werden zeitlich nacheinander abgearbeitet.

test.php:
PHP-Code:
<?php
set_time_limit
(180); 
ob_implicit_flush() ;

for(
$i =0$i<=40$i++){
    echo 
"$i <br/>\n";
    
sleep(1);
}
?>
Rufe ich das Script z.B. in zwei verschiedenen Tabs des gleichen Browsers nahezu zeitgleich auf, wartet der zweite Script-Aufruf, bis der erste Durchlauf beendet ist.
(getestet mit jeweils 2 Tabs in Mozilla und Opera auf
Server:
Apache/2.2.4 - php PHP/5.2.1 - WinXP
Apache ?? - php 5.2.0-8-etch Debian
)


Rufe ich dasselbe Script nahezu zeitgleich von zwei verschiedenen Browsern oder mit zwei verschiedenen Host-Angaben (z.B mit.: http://127.0.0.1/test.php und http://localhost/test.php) auf, starten beide Script-Instanzen sofort nach dem jeweiligen Script- Aufruf. (es wird also nicht gewartet, bis eine gerade laufende Script-Instanz beendet ist).

Dieses Verhalten hatte ich nicht erwartet.
Woran liegt das?

Wie kann ich mehrere Scriptaufrufe des gleichen Scripts vom gleichen Client zeitl. parallel abarbeiten lassen.

Geändert von ospx (27-12-2008 um 09:57 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 27-12-2008, 12:02
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Ohne genauere Angaben zur Serverkonfiguration ist es sehr schwer, aussagen zu machen, aber ich würde mal schätzen, daß der Apache Beschränkungen für die maximale Anzahl gleichzeitiger Verbindungen pro IP auferlegt (z.B. mit dem Modul mod_throttle), oder ein Ressourcen-Limit (Rechenzeit, Speicher) pro IP festlegt (Was mir aber als eingebaute Apache-Funktion nicht bekannt ist). Oder es ist die Firewall des Servers, oder oder... PHP selbst ist ziemlich sicher unschuldig.

Vielleicht bringt dich auch eine Google-Anfrage á la
http://www.google.de/search?hl=de&q=...le-Suche&meta=
weiter.
Mit Zitat antworten
  #3 (permalink)  
Alt 27-12-2008, 14:11
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es scheint einfach an den Browsern zu liegen. Habe mir gerade testweise einen einfachen java-Client geschrieben. Der verhält sich so, wie ich es erwartet habe.
Ich kann mehrere Client-Instanzen starten und diese werden vom Server auch prallel abgearbeitet.

Ich frage mich nun bloß, wie wohl das Javascript XMLHttpRequest-Object (bzw. ActiveX) damit umgeht.

Geändert von ospx (27-12-2008 um 14:21 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 27-12-2008, 14:51
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ich glaube nicht, dass es am Browser liegt. Wenn ich mir meinen Firebug ansehe, dann werden die meisten Ressourcen parallel angefordert.
Afaik verhält sich PHP bei gestarteter Session seriell, so dass die Sessiondaten nicht von zwei Prozessen gleichzeitig geändert werden können. Ist vielleicht session.auto_start aktiv?
Mit Zitat antworten
  #5 (permalink)  
Alt 27-12-2008, 15:30
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nein, session.auto_start steht auf beiden Servern (auf denen ich das jetzt getestet habe) auf 'off'.

Die Serverkonfigurationen dürften eigentl. nicht besonders exotisch sein. Das eine ist eine fast-standard-Xampp - Konfiguration und das andere ist eine durchschnittl. Konfiguration eines öffentlichen Anbieters.

Es würde mich sehr interessieren, ob das Phänomen bei euch auch auftritt. Oben gepostetes Testscript läuft langsam und zeigt durch die ungepufferte Ausgabe, was gerade passiert, sodass man bequem zwei Requests nacheinander absetzen kann und den (parallelen oder blockierenden ) Verlauf gut beobachten kann.

Ich glaube eher, es fällt meist einfach nicht auf, da php-Scripte selten lange Laufzeiten haben, wie das oben gepostete, und wenn, kaum dasselbe Script zweimal direkt nacheinander aufgerufen wird.

Edit: Nicht, dass wir uns falsch verstehen. Es geht um ein und dasselbe php-Script (ident. URL), welches direkt zweimal hintereinander aufgerufen werden soll und dadurch zwei parallel laufende php-Script-Instanzen erzeugt und abgearbeitet werden sollen. Hatte ja oben geschrieben, dass es ausreicht, in der URL zwei verschiedene Host-Angaben (z.B. 127.0.0.1 und 127.0.0.2) zu schreiben, und schon läuft es parallel.

Geändert von ospx (27-12-2008 um 15:42 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 27-12-2008, 18:12
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ein ordentlicher Browser merkt einfach, wenn die selbe URI gerade in einem anderen Tab/Fenster geöffnet wird. Statt den Request noch einmal abzuschicken, wartet er einfach ab, bis die Seite im ersten Tab/Fenster geladen ist und lädt sie im zweiten Tabe/Fenster aus dem Cache.

Sobald man Firebug für eine URI aktiviert, passiert das nicht mehr, denn damit Firebug die Ladezeiten usw. anzeigen kann, muss natürlich auch wirklich was übers Netz geladen werden. Kurzum: Firebug umgeht den Browsercache.

Wenn du dieses Verhalten grundsätzlich wünschst, schaltest du einfach deinen Browsercache ab. Wenn du eine Seite betreibst und dieses Verhalten für alle deine Besucher wünschst, sendest du entsprechende Header - oder überdenkst dein Konzept noch einmal.
Mit Zitat antworten
  #7 (permalink)  
Alt 27-12-2008, 19:11
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, hatte inzwischen auch die Header gesetzt.

Aber bin jetzt mit den Headern und ohne Session bei einem halbwegs akzeptablen Ergebnis angekommen. Wobei es natürlich sehr blöd ist, dass keine Sessions verwendet werden können.
Mit Zitat antworten
  #8 (permalink)  
Alt 27-12-2008, 19:15
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Wenn es so ist, wie onemorenerd vermutet, dann mußt du halt einen zufälligen String ans Ende der URL im 2. Tab hängen.
Mit Zitat antworten
  #9 (permalink)  
Alt 27-12-2008, 20:04
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dank euch - wie gesagt, funktioniert jetzt. Besonders auf das Problem der Sessions wäre ich nicht gekommen.
Die Header sind ebenso nötig. Dass man keine Sessions verwenden kann, bleibt aber doof. Ich weiß, wie ich mir meine eigene Sessionverwaltung aufbaue. Das nutzt mir aber bei meinem konkreten Experiment ziemlich wenig, da es eine kleine zusammengehörige Klassensammlung (ich will es nicht library nennen) werden soll, die in anderen Scripten verwendet werden kann/soll, wenn funktioniert, was ich mir vorstelle. In den jeweils einbindenden php-Scripten könnten durchaus Sessions aufkreuzen.

Der Opera verhält sich so, wie onemorenerd es beschreibt, solange die header fehlen.
Mit Zitat antworten
  #10 (permalink)  
Alt 27-12-2008, 20:09
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Hast du es mit einem zufälligen Anhängsel an die URL probiert?
Mit Zitat antworten
  #11 (permalink)  
Alt 27-12-2008, 20:50
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Aber bin jetzt mit den Headern und ohne Session bei einem halbwegs akzeptablen Ergebnis angekommen. Wobei es natürlich sehr blöd ist, dass keine Sessions verwendet werden können.
Natürlich kann man auch Sessions verwenden!!
Aber das Session Locking spielt einem einen Streich.
Also die Session nur "kurz" starten. Variablen lesen und SOFORT danach session_write_close().

Das sollte deine Sorgen zumindest mildern.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 27-12-2008, 20:56
ospx
 Newbie
Links : Onlinestatus : ospx ist offline
Registriert seit: Feb 2008
Beiträge: 6
ospx ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ohh, vielen Dank, das klingt sehr gut.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:26 Uhr.