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!