31
Vývoj / Re:Implementace long-polling v Javě (Spring)
« kdy: 17. 04. 2018, 23:35:48 »K tomu scheludingu ...CitaceNotice that the methods to be scheduled must have void returns and must not expect any arguments
Potrebujeme metode predat nejakej argument na zaklade ktereho ma rozpoznat nova data pro daneho uzivatele, cize to se asi pouzit neda.
Tak metoda (Runnable) má nějaký closure context, případně může mít instance variables. Zjednodušený example přes polling (poznámky o konstantách, špatných parametrech a jménech anotací prosím do /dev/null):
Kód: [Vybrat]
CompletableFuture<Message> notifyMessages(@SessionParam("username") String username) {
CompletableFuture<Message> result = new CompletableFuture<>();
long timeoutTimestamp = System.currentTimeMillis()+30000;
Runnable checker = () -> {
List<Message> messages = messageStore.loadMessages(username);
if (messages.isEmpty()) {
long nextSchedule = System.currentTimeMillis()+10000;
if (nextSchedule >= timeoutTimestamp) {
result.completeExceptionaly(new TimeoutException());
}
else {
executor.schedule(checker, 10000);
}
}
else {
result.complete(messages);
}
}
executor.schedule(checker, 10000);
return result;
}
U messaging by se musel nastavit listener na message, který by zkompletoval future podle filtrovaného a zaregistrovaného username.