Ich versuche Long Polling-Funktionalität in Laravel zu programmieren, aber wenn ich die Funktion sleep() verwenden, friert die gesamte Anwendung/blockiert bis zur Funktion sleep() erledigt. Weiß jemand, wie man dieses Problem löst?Lange Abfrage in Laravel (Schlaf() -Funktion machen Anwendung einfrieren)
Mein Javascript sieht wie folgt aus:
function startRefresh() {
longpending = $.ajax({
type: 'POST',
url: '/getNewWords',
data: { wordid: ""+$('.lastWordId').attr('class').split(' ')[1]+"" },
async: true,
cache: false
}).done(function(data) {
$("#words").prepend(data);
startRefresh();
});
}
Und die PHP:
public function longPolling()
{
$time = time();
$wordid = Input::get('wordid');
session_write_close();
//set_time_limit(0);
while((time() - $time) < 15) {
$words = Word::take(100)->where('id', '>', $wordid)
->orderBy('created_at', 'desc')->get();
if (!$words->isEmpty()) {
$theView = View::make('words.index', ['words' => $words])->render();
if (is_object($words[0])) {
$theView .= '<script>
$(".lastWordId").removeClass($(".lastWordId").attr("class")
.split(" ")[1]).addClass("'.$words[0]->id.'");
</script>';
}
return $theView;
} else {
sleep(2);
}
}
}
Ich verwende: PHP 5.5 und Apache 2.2.22
das Problem nicht scheinen außerhalb von Laravel aufzutreten (in keinem Laravel-Projekt).
Vielen Dank im Voraus.
Dies ist nicht lange Polling. Es ist nur Umfragen. –
Der Grund, warum ich das so mache, ist, dass Sie bei Apache/PHP oft Verbindungszeitüberschreitungen bekommen, indem Sie eine Verbindung offen lassen. Besonders wenn Sie sich hinter einem Amazon Load Balancer befinden, wird die Verbindung nach 30 Sekunden beendet. IMO besser alle paar Sekunden abzufragen. – bonez
Polling ist einfach. Langes Polling ist in PHP zumindest schwer. – doncadavona