Tôi đang cố gắng lập trình chức năng bỏ phiếu dài trong Laravel, nhưng khi tôi sử dụng hàm sleep(), toàn bộ ứng dụng bị đóng băng/khối cho đến khi hàm sleep() hoan thanh. Có ai biết làm thế nào để giải quyết vấn đề này?Bỏ phiếu dài trong Laravel (sleep() làm cho ứng dụng đóng băng)
javascript của tôi trông như thế này:
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();
});
}
Và 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);
}
}
}
Tôi đang sử dụng: PHP 5.5 và Apache 2.2.22
Vấn đề không dường như xảy ra bên ngoài Laravel (không có dự án Laravel nào).
Xin cảm ơn trước.
Đây không phải là cuộc thăm dò ý kiến dài. Chỉ cần bỏ phiếu của nó. –
Lý do tôi làm như thế này là bởi vì với apache/php, bạn sẽ thường xuyên chạy vào thời gian chờ kết nối bằng cách để lại một kết nối mở. Đặc biệt nếu bạn đang ở phía sau bộ cân bằng tải Amazon, kết nối sẽ hết sau 30 giây. IMO tốt hơn để thăm dò mỗi vài giây. – bonez
Bỏ phiếu dễ dàng. Việc bỏ phiếu dài là khó khăn trong PHP ít nhất. – doncadavona