Sto provando a programmare la funzionalità di polling lungo in Laravel, ma quando uso la funzione sleep(), l'intera applicazione si blocca/blocca fino alla funzione sleep() è fatta. Qualcuno sa come risolvere questo problema?Polling lungo in Laravel (la funzione sleep() blocca l'applicazione)
mio javascript si presenta così:
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();
});
}
E il 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);
}
}
}
sto usando: PHP 5.5 e Apache 2.2.22
Il problema non lo fa sembra accadere fuori da Laravel (in nessun progetto Laravel).
Grazie in anticipo.
Questo non è un polling lungo. È solo un sondaggio. –
Il motivo per cui lo faccio è perché con apache/php spesso si incontrano i timeout delle connessioni lasciando aperta una connessione. Soprattutto se sei dietro un sistema di bilanciamento del carico di Amazon, la connessione scade dopo 30 secondi. IMO meglio sondare ogni paio di secondi. – bonez
Polling è facile. Il polling lungo è difficile in PHP atleast. – doncadavona