Ich möchte etwas wie Chat in meiner App erstellen, aber ich habe ein Problem mit der Erfassung von Änderungen in Echtzeit. Mein JavaScript-Code scheintAsync Servlet Antworten im Frühjahr
function load() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log("Response nr" + id++ + ". " + xhr.responseText);
}
};
xhr.open("GET", "/new", true);
xhr.send();
}
function sendMessage() {
...
var request = new XMLHttpRequest();
var params = ...
request.open("POST", "/new", true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(params);
}
gut zu funktionieren Aber der Frühling sendet Antwort nur einmal (nur nach dem ersten Posting Anfrage)
@RestController
public class MessageController {
private final MessageRepository messageRepository;
private final Queue<DeferredResult<List<Message>>> messagesQueue = new ConcurrentLinkedQueue<>();
@Autowired
public MessageController(MessageRepository messageRepository) {
this.messageRepository = messageRepository;
}
@RequestMapping("/new")
public DeferredResult<List<Message>> get() {
final DeferredResult<List<Message>> deferredResult
= new DeferredResult<>();
this.messagesQueue.add(deferredResult);
return deferredResult;
}
@RequestMapping(value = "/new", method=RequestMethod.POST)
public void postMessage(...) {
Message message = ...
...
this.messageRepository.save(message);
for (DeferredResult<List<Message>> result: this.messagesQueue) {
List<Message> messages = this.messageRepository.findAll();
result.setResult(messages);
//this.messagesQueue.remove(result);
}
}
(Ja, ich weiß, dass alle Nachrichten zu senden, jedes Mal nicht um einen gute Idee, ich werde es später beheben)
Ich habe ein paar Beispiele auf spring.io/blog gesehen, aber sie funktionieren nicht in meinem Fall. Durch das Entfernen der letzten Zeile wird das Problem nicht gelöst. Was soll ich machen?
PS. Ich habe EnableAsync Annotation und ich verwende Spring-Boot-Konfiguration.
Es war nicht mein Konzept überhaupt, ich fand es [hier] (https://spring.io/blog/2012/05/16/spring-mvc-3-2-Vorschau-Chat-Probe /) – Kuba