kostenloser Webspace werbefrei: lima-city


Können php Scripts parallel laufen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    unlikus

    unlikus hat kostenlosen Webspace.

    Ich habe ein Script, welches einen User registriert.
    Dabei ist es wichtig, dass selbst wenn sich 2 User gleichzeitig registrieren, die Scripte hintereinander ausgeführt werden.
    Jetzt meine Frage: Wenn man ein php Script 2 mal gleichzeitig aufruft, wird das Script, dann mal mal gleichzeitig unabhängit ausgeführt oder hintereinander. Oder wo man das einstellen kann.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Da der Server multithreaded ist können PHP-Scripts parallel laufen. Verlass dich also niemals darauf, dass 2 Aufrufe auch hintereinander ausgeführt werden!
  4. Aus welchen Gründen ist es den wichtig wann der User registriert wurde?

    Auch wenn die Wahrscheinlichkeint, dass 2 benutzer sich exakt zur gleichen Zeit registrieren nicht sehr groß, aber auch nicht ausgeschlossen und daher sollte ein Script damit umgehen können.

    Wenn du uns die Herangehensweise des Scripts erläutern könntest könnte man das von dir angesprochene 'Problem' sicher umgehen.
    MFG
  5. Nimm doch einfach in MySQL auto increment Her, dass geht dann immer.
  6. Autor dieses Themas

    unlikus

    unlikus hat kostenlosen Webspace.

    für die Id nehm ich schon auto increment.
    Gibt es eine Möglichkeit Sicher zu stellen, dass die Scripts nacheinander ausgeführt werden. Wenn nicht kann es zu Problemem komme, da sonst 2 User den gleichen Platzhalter nutzen, der vorher für sie gespielt hat.
  7. Wenn du die Platzhalter über DB laufen lässt, dann kannst du diese als reserviert, belegt oder frei definieren und entsprechend an dein Script übermitteln. So hast du das Problem dann nicht mehr.
  8. das dürfte dein kopfzerbrechen mildern.
    in keinem computer läuft 'gleichzeitig' irgend etwas. alles der reihe nach ;)
    ja und für die, die es kommentiern wollen, dass es um v2.6 geht, auch vorher ist nichts gleichzeitog gegangen. (so was blödes aber auch :))
  9. unlikus schrieb:
    Ich habe ein Script, welches einen User registriert.
    Dabei ist es wichtig, dass selbst wenn sich 2 User gleichzeitig registrieren, die Scripte hintereinander ausgeführt werden.
    [...]
    Gibt es eine Möglichkeit Sicher zu stellen, dass die Scripts nacheinander ausgeführt werden. Wenn nicht kann es zu Problemem komme, da sonst 2 User den gleichen Platzhalter nutzen, der vorher für sie gespielt hat.

    Auch wenn czibere grundsätzlich recht hat, solltest Du deinen Ansatz überdenken. Eine im Web erreichbare Seite zeichnet sich halt dadurch aus, daß sie von vielen Usern nahezu gleichzeitig aufgerufen/verwendet werden kann. Wenn dein Skript eine serielle Ausführung zwanghaft verlangt, solltest Du den Background und die Gestaltung des Skriptes überprüfen und überarbeiten.

  10. yo mey!
    ich habe da etwas vergessen, und zwar: darauf hinzuweisen, dass parallel und gleichzeitig nicht das selbe, ja sogar nicht einmal das gleiche sind. was parallel läuft, muss nicht zwingend gleichzeitig laufen.
    (aber das ist leider die übliche haarspalterei des faches ;)
  11. ansonsten gibt es noch die möglichkeit, sich einen stack aufzubauen, den man dann seriell abbauen lässt. ist nur die frage, wie du den User so lange hinhälst, bis der abgebaut ist...


    dazu kannst du eine temporäre tabelle bauen, die dann von einem Prozess geleert wird. darüber kannst du dann auch anti-Flood-Control machen, falls wer bissel mehr aufmerksamkeit will...


    über Ajax könntest du die User dann auf die warteschlange setzen, bis der stack bis zu ihrem jeweiligen EIntrag/Prozess/wasauchimmer abgebaut ist...


    hoffe, das wäre für den TE ein sinnvoller Ansatz. Ansonsten würd ich noch das Wort Transaktionen in die Runde werfen...
  12. huch!
    da schießt man mit kanonen auf spatzen ;)
    also nochmals kurz gefasst: wenn 1000 neue user innerhalb einer sekunde sich anzumelden versuchen, kommt sicherlich nicht vor, dass nur 2 von denen gleichzeitig (das heißt: bis auf die letzte nachkommastelle(?) genau!!) angemeldet werden!
    die kurze erklärung ist, dass irgendein prozess/thread dem anderen vorgezogen wurde - warum auch immer (nochmals oben lesen :)
  13. Eventuell sollten wir uns alle ein wenig bremsen und darauf warten, daß unlikus erklärt, was genau das "kann es zu Problemem komme, da sonst 2 User den gleichen Platzhalter nutzen" sagen soll.
    Hat er da etwas falsch verstanden, oder ist dieser "Platzhalter" (was auch immer er damit meint, liegt ja noch im Dunklen) wirklich ein Problem?

    Problemlösungsvorschläge, ohne das Problem zu kennen, Haarspaltereien und Spatzenkanonen sind wirklich wenig hilfreich. :wink:

    Beitrag zuletzt geändert: 12.11.2012 1:13:39 von fatfreddy
  14. unlikus schrieb:
    ..., da sonst 2 User den gleichen Platzhalter nutzen, der vorher für sie gespielt hat.


    ich vermute mal, die Besucher können schon ohne Anmeldung als "Gast" aktiv werden (Spielen)
    und wenn dieser Gast sich dann als "User" anmeldet, dann sollen die bisher als Gast gespielten
    Ergebnisse (Spieler-Daten) auch für den neuen User-Account übernommen werden.

    Wahrscheinlich wird dem "Gast" ein "Platzhalter" (z.B. Timestamp) als ID zugewiesen
    damit die Gast-Spieler-Daten gespeichert und dann für User übernommen werden können,

    Es geht also wohl darum, den Besucher (als User) eindeutig zu identifizieren (und zuordnen) zu können.

    Wenn Du auch jeden Gast in MySQL mit auto-increment speicherst, kannnst Du ja diese ID nehmen,


    ... geht auch wenn Du nicht in MySQL sondern die "Gast" Daten in einer _SESSION speicherst

    auch wenn zwei Gäste gleichzeitig zu Spielen beginnen,
    dann sollte ja die Session-ID je Gast auch eindeutig sein.

    $gast_sid = session_id();
    // ------ oder ------ 
    $gast_sid = $_COOKIE["PHPSESSID"];


    ... oder gelcih je Gast ein "echtes" COOKIE anlegen ?

    ... zudem könntest Du eine Komination aus Timestamp und IP-Adresse zur "Erkennung" nehmen
    $user_hash = md5( $timestamp . $userip );


    Es gibt viele Möglichkeiten, jedem Gast (Besucher der spielt) eine eindeutige ID zu-zuwweisen.

    wichtig ist halt, dass jeder "Gast" eindeutig zugeordnet werden kann, dann ist die Reihenfolge egal



    Beitrag zuletzt geändert: 12.11.2012 11:01:14 von erlebnis
  15. Autor dieses Themas

    unlikus

    unlikus hat kostenlosen Webspace.

    Nein es gibt nicht die Möglcihkeit als gast du spielen. In dem Spiel gibt es ligen und wenn die noch nicht voll sind gibt es platzhalter und die dürfen nicht bei der registration doppelt verwende werden. ich brauche auf jeden Fall eine Möglcihkeit die scripte immer hintereinander ablaufen zu lassen
  16. ach für so ein ding brauchst du keine Transaktionen... sollen die leute ihre ligen selbst auswählen oder sollen die automatisch zugewiesen werden?

    automatische Zuweisung ist kein thema, weil SQL-inserts/updates nacheinander laufen. du kannst nach der eintragung ja checken, ob du das limit der platzhalter überschritten hast, dann trägst du denjenigen wieder aus und in die nächste rein... bis fertig...


    Wenn dir das zu unprofessionell it, kannst du dich auch an eigenen Transaktionen versuchen...
  17. Autor dieses Themas

    unlikus

    unlikus hat kostenlosen Webspace.

    Das registrierungsscrip ist sehr komplex und das problem lässt sich nicht so einfach lösen. Ich brauche auf jeden Fall eine Lösung bei der ich sicherstellen kann, dass sich nicht zwei Leute gleichzeitig registrieren
  18. fatfreddy schrieb:
    Eventuell sollten wir uns alle ein wenig bremsen und darauf warten, daß unlikus erklärt, was genau ...
    genau ;)
    unlikus schrieb:
    Das registrierungsscrip ist sehr komplex und das problem lässt sich nicht so einfach lösen. Ich brauche auf jeden Fall eine Lösung bei der ich sicherstellen kann, dass sich nicht zwei Leute gleichzeitig registrieren
    unlikus! du wiederholst dich und ich kann (wiederholt) nur sagen, dass es nicht möglich ist, dass 2 (oder mehr) leute sich gleichzeitig anmelden! (ich weiß es nicht, ob das jetzt endlich rüberkommt).
  19. Hallo :wave:

    czibere schrieb:
    unlikus! du wiederholst dich und ich kann (wiederholt) nur sagen, dass es nicht möglich ist, dass 2 (oder mehr) leute sich gleichzeitig anmelden! (ich weiß es nicht, ob das jetzt endlich rüberkommt).


    Soweit mir bekannt ist es sehr wohl möglich, dass zwei 2 Sachen gleichzeitig ausgeführt werden. Das führt dann bei z.B. Browsergames zu "Ressourcenverdopplungen" o.ä. .
    Mir hat da mal jemand ein paar Takte drüber erzählt, ich erinnere mich nur nicht mehr so genau an die Lösung. Evtl. war es mit Cronjobs (Script geht nacheinander die Neuanmeldungen durch)?

    Oder auch mit Ajax, ich bin mir ziemlich sicher, dass das bei Universitäten für Kursanmeldungen eingesetzt wird (weil sich alle um x Uhr anmelden). Damit kenne ich mich aber nicht wirklich aus und kann keine Lösungsansätze bieten.

    mfg :wave:
  20. Wie stellst Du Dir eine Lösung mit Cronjobs vor? Dann werden die Anmeldungen doch erst nach einer Weile ausgeführt, oder wie meinst Du das?

    Und zur Frage: Ist es nicht so, dass MySQL alle Anfragen nacheinander abarbeitet? Sonst gäbe es doch keine eindeutigen Auto-Increments...
  21. Hallo :wave:

    tobiworlds schrieb:
    Wie stellst Du Dir eine Lösung mit Cronjobs vor? Dann werden die Anmeldungen doch erst nach einer Weile ausgeführt, oder wie meinst Du das?

    Und zur Frage: Ist es nicht so, dass MySQL alle Anfragen nacheinander abarbeitet? Sonst gäbe es doch keine eindeutigen Auto-Increments...


    Öh naja, der Cronjob kann doch alle paar Sekunden ausgeführt werden?

    Es scheint so zu sein, dass gewaltige bugs auftreten können, wenn mehrere Befehle zur gleichen Zeit verarbeitet werden sollen. Womit das etwas zu tun hat (Kernel, Multicore-CPU, "ist halt so") weiß ich nicht, aber ich denke die Frage des TE ist schon berechtigt, habe die Fehler in einem Amateur-Browsergame hautnah miterleben können. :P

    mfg :wave:
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!