2010-11-22 11 views
1

Nein, ich versuche nicht zu sehen, wie viele Schlagworte ich in einen einzigen Fragetitel werfen kann.AJAX lange Polling eine REST-API/Memcached in einer PHP-Anwendung

Ich mache REST-Anfragen durch cURL in meiner PHP-App zu einigen Webservices. Diese Anforderungen müssen relativ häufig gestellt werden, da ein Großteil der Anwendung von dieser API abhängt. Allerdings gibt es eine starke Latenz bei den Anfragen (2-5 Sekunden), was meine App nur langsam nervt.

Während ich auf halbem Weg zu einer Lösung mit einer Empfehlung zum Zwischenspeichern dieser Anforderungen in Memcached bin, bin ich immer noch nicht mit dieser Art von Latenz jemals in der Anwendung erscheinenden zufrieden.

Also hier war mein Gedanke: Ich kann AJAX Long-Polling im Hintergrund implementieren, so dass der Benutzer niemals die Latenzzeit erlebt. Die REST-Anforderungen/Memcache-Suchvorgänge werden in einem festgelegten Intervall über AJAX hinweg ausgeführt.

Aber das ist alles wirklich neu für mich und ich bin mir nicht sicher, ob dies der beste Ansatz ist. Und wenn ich auf dem richtigen Weg bin, weiß ich, dass PHP + Apache so etwas nicht gut behandeln wird. Aber PHP ist die einzige Sprache, die ich kenne. Ich würde im Idealfall gerne etwas wie Tornado in Python einrichten, aber ich bin mir nicht sicher, ob ich gerade über-engineering bin oder nicht.

Alle Gedanken hier wären hilfreich und sehr geschätzt.

+0

Wie groß ist der Abstand zwischen REST-Anfragen und Ihren Web-Services? Ein anderes Wort, die Latenz wird durch Netzwerk verursacht oder einfach die Rest-Anfragen nur langsam. Habt ihr ein Cache-Warm-up für REST-Anfragen in Betracht gezogen? – ajreal

+0

@ajreal, Was ist Cache-Aufwärmphase? –

+0

Das Aufwärmen besteht darin, eine Reihe von Daten vorab zu laden, sodass der Memcache mit gültigen Daten aus REST gefüllt wird. Das bedeutet, dass Sie Ihre Anwendung nicht zur Ermittlung der REST-URL verwenden können, sondern einen Hintergrundjob ausführen können, um diese REST-URL vorab abzurufen. Sie können eine Datenbank oder Datei verwenden, um die REST-URL zu verfolgen, die Sie in Ihrer Anwendung ausgeführt haben. – ajreal

Antwort

0

Dies war ein ziemlich schneller Turnaround, aber ich ging zurück und profilierte meine App durch Echolot microtime() während der relevanten Prozesse. Es stellt sich heraus, dass ich meine cURL-Anfragen nicht parallelisiere und das ist der Punkt, an dem ich den echten Hit mache. Es dauert ungefähr 2 Sekunden, dies zu tun, was sehr lange Verzögerungen bedeutet, während jede cURL-Anfrage nacheinander ausgeführt wird.

+1

in diesem Fall, verwenden Sie curl_multi_exec - http://php.net/manual/en/function.curl-multi-exec.php – ajreal

+0

@ajreal Danke für den Hinweis darauf. Das ist tatsächlich, was ich am Ende benutzt habe. –

Verwandte Themen