2010-12-14 8 views
0

Ich habe ein PHP-Skript, das eine Socket-Verbindung (mit fsockopen) öffnet und dauert ca. 15 Sekunden, um das Ergebnis an den Browser zu vervollständigen. Wenn der Browser eine zweite Anfrage sendet, wird dies serialisiert. Dies führt zu einer schlechten Benutzererfahrung, denn wenn der Benutzer dreimal klickt, dann ist die dritte Anfrage, die nach 30 Sekunden gesendet wird, diejenige, die die Antwort erhält - die ersten 2 Anfragen vom Browser gehen verloren.PHP gleichzeitige TCP-Verbindungen vom selben Browser

Ich habe keine Sitzung in meinem Skript, sondern versuchte session_write_close() am Anfang meines Skripts setzen, die nicht geholfen hat.

session.auto_start Auch in der php.ini = 0.

Alle Ideen, wie die Client-Anfragen von demselben Browser parallel zu machen ?? Firefox

2) Laden und installieren Sie Firebug

3) hinzufügen sleep(10) zu Ihrem PHP-Skript

Dank Gary

+0

Hier geht es darum, wie Sie die Verbindungen vom Client initiieren, nicht was auf Ihrem Server ist. Es ist eine JavaScript/Websocket-Frage, nicht PHP. –

+0

Haben Sie stream_context_create() verwendet? Bearbeiten Sie Ihre Frage und fügen Sie einen Codeabschnitt hinzu, um mehr über das Problem zu erfahren. – Manu

Antwort

1

1) Laden und installieren, so dass es für ein paar Sekunden Pausen vor der Rückkehr seine Antwort

4) Öffnen Sie Ihre Webseite und beobachten Sie die ausgehenden Verbindungen mit Firebug. Sie sollten mehrere sehen, die offen sind und noch keine Antwort haben. Sie sollten alle ungefähr zur gleichen Zeit zurückkehren, wenn jeder die Verzögerung von 10 Sekunden beendet.

Wenn mehrere Verbindungen gleichzeitig nicht gleichzeitig angezeigt werden und ungefähr zur gleichen Zeit zurückkehren, müssen Sie sich Ihren Front-End-Code ansehen. AJAX-Anforderungen sind asynchron und können parallel ausgeführt werden. Wenn Sie sehen, dass sie stattdessen seriell ausgeführt werden, bedeutet dies, dass Sie Ihren JavaScript-Code reparieren müssen, nicht irgendetwas auf dem Server.

Parallel asynchronous Ajax requests using jQuery

+0

Ich analysierte die Wireshark-Pakete und stellte fest, dass die nächste Anfrage erst dann vom Browser ausgeführt wird, nachdem sie eine Antwort von der vorherigen Anfrage erhalten hat. Das scheint also ein Kundenproblem zu sein. Vielen Dank für die Antworten. Ich werde Sie über meine Ergebnisse auf dem Laufenden halten. – Gary

0

Sie sollten redis wenn überhaupt möglich installieren (* nichts).

So installieren Sie nur das tun, einfach

make 

Mit lpush/brpop Sie asynchron dieses Material verarbeiten kann und um intakt zu halten. Wenn Sie ein paar Worker-Threads generieren, können Sie sogar mehrere Anfragen gleichzeitig bearbeiten. Die predis Client-Bibliothek ist ziemlich solide

Verwandte Themen