SSE остается в ожидании, пока работает AJAX
В моем проекте у меня есть длительный процесс, который вызывается AJAX. Продолжительность может быть от 1 до 15 минут.
Пока AJAX работает, я хочу давать пользователям обновления. Он просто должен просто показать, сколько строк осталось добавить в базу данных.
Я обнаружил, что есть несколько вариантов, чтобы понять это. Опрос, SSE или WebSockets. Я никогда не работал с WebSockets, и я не смог найти хороший пример.
Я пытаюсь сейчас с SSE, который я вполне понимаю, и он работает должным образом... но когда AJAX начнет работать, соединение с eventSource будет в ожидании. Таким образом, пока AJAX работает, обновления не принимаются.
Код:
<script type="text/javascript">
var es;
function checkProgress(id){
es = new EventSource('checkProgress.php');
es.addEventListener('message', function(e) {
console.log(e.data);
}, false);
}
checkProgress(1);
$(function() {
$('.submit').on('click', function() {
var form = $('form')[0];
var form_data = new FormData(form);
$.ajax({
type: 'POST',
url: 'submit.php',
contentType: false,
processData: false,
data: form_data,
success:function(response) {
console.log(response);
}
});
return false;
});
});
</script>
Скриншоты:
На самом деле, я до сих пор не нашел ни ссылки, ни примера того, как реализовать SSE, пока выполняется процесс AJAX. Все ссылки или примеры дают примеры, позволяющие файлу getProgress что-то делать.
1 ответ
Я вижу, что вы используете PHP. Моим лучшим предположением будет то, что вы также используете встроенное управление сессиями PHP. Проблема в том, что доступ к сеансу является исключительной операцией. Я полагаю, что ваша операция AJAX открыла и заблокировала сеанс, не позволяя вашему сценарию SSE также открыть сеанс. Вы можете не открывать сеанс или открывать его только для чтения.