Potrebuju mit takovy life-reload <div> elementu na frontendu. Jamile se mi na backendu neco zmeni, melo by se to okamzite promitnout do toho <div>. A nechci to refreshovat nejakym timerem.
Zkousim na to jit cestou long pollingu:
<script>
(function poll() {
setTimeout(function() {
$.ajax({
url: "/events",
type: "GET",
success: function(data) {
$("#table").html(data);
},
complete: poll,
timeout: 10000
})
}, 1000);
})();
</script>
Na backendu na prichozim requestu potom zavolam wait(timeout) a tim zablokuju thread requestu:
synchronized (lock) {
lock.wait(waitMs);
}
A kdyz se mi ve worker threadu vyvola patricna udalost, tak v nem zavolam:
synchronized (lock) {
lock.notifyAll();
}
Tim dojde k tomu, ze se thread requestu probudi a na frontend se okamzite vrati vystup s aktualnimi daty, updatuje se <div> a pak se znovu udela z jquery request.
Tento pristup je docela jednoduchy, ma vsak jisty design leak:
Mezi 2 po sobe jdoucimi http requesty je slepe misto, kdy na udalost neceka zadny request - pokud by se zde vyvolala udalost, tak ji nic nezachyti. To je problem.
Potreboval bych nejakou javascriptovou knihovnu k tomuto urcenou, ktera se mi sama postara o to, aby na backendu vzdy naslouchal alespon 1 request.
Nicmene necham si poradit, jak to udelat vsechno nejak lip. Na backendu mam Javu a Spring MVC.