Heim  >  Artikel  >  Backend-Entwicklung  >  Warum blockieren sich meine AJAX-Anfragen in PHP gegenseitig?

Warum blockieren sich meine AJAX-Anfragen in PHP gegenseitig?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 16:59:30300Durchsuche

Why Do My AJAX Requests Block Each Other in PHP?

Gleichzeitige AJAX-Anfragen blockieren sich gegenseitig

In bestimmten Situationen werden AJAX-Anfragen möglicherweise nicht gleichzeitig ausgeführt, was zu unerwartetem Verhalten führt. Dieses Problem trat auf, als ein Benutzer auf ein Problem mit zwei gleichzeitigen AJAX-Anfragen stieß, die den Fortschritt beim Exportieren von Daten in eine XSLX-Datei anzeigen sollten. Die erste Anfrage löst ein langes PHP-Skript aus und die zweite Anfrage prüft in regelmäßigen Abständen, ob Fortschrittsaktualisierungen vorliegen.

Bei der Untersuchung wurde festgestellt, dass die zweite AJAX-Anfrage vor der Ausführung auf den Abschluss der ersten wartete. Dieses Verhalten wird auf die Sitzungsblockierung in PHP zurückgeführt.

Sitzungsblockierung in PHP

Standardmäßig verwendet PHP Dateien zum Speichern von Sitzungsdaten. Wenn eine Sitzung gestartet wird (mit der Funktion session_start()), öffnet PHP die Sitzungsdatei zum Schreiben und sperrt sie, um exklusiven Zugriff zu gewährleisten. Dieser Sperrmechanismus verhindert, dass gleichzeitige Anforderungen gleichzeitig auf die Datei zugreifen. Infolgedessen musste die zweite AJAX-Anfrage warten, bis die erste abgeschlossen und die Sitzungsdatei entsperrt war, bevor sie ausgeführt werden konnte.

Lösung

Die Lösung hierfür Das Problem besteht darin, den standardmäßigen dateibasierten Sitzungsspeicher von PHP zu deaktivieren oder die Sitzungsdatei nach dem Schreiben explizit zu schließen und die Sperre aufzuheben.

Um den dateibasierten Sitzungsspeicher zu deaktivieren, fügen Sie die folgende Zeile zu Ihrer php.ini hinzu Datei:

session.save_path =

Um die Sitzungsdatei explizit zu schließen, verwenden Sie die Funktion session_write_close():

<code class="php"><?php
    session_start();

    $_SESSION['foo'] = 'bar'; // Write data to the session

    session_write_close(); // Close the session file

    echo $_SESSION['foo']; // You can still read from the session.
?></code>

Durch die Implementierung dieser Lösungen können Sie sicherstellen, dass die zweite AJAX-Anfrage gleichzeitig ausgeführt wird Mit der ersten können Sie den Fortschritt ohne Verzögerungen verfolgen.

Das obige ist der detaillierte Inhalt vonWarum blockieren sich meine AJAX-Anfragen in PHP gegenseitig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn