私のアプリではチャットのようなものを作成したいと思いますが、リアルタイムで変更をキャプチャする際に問題があります。 私のjavascriptのコードは春の非同期サーブレットの応答
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);
}
を正常に動作するようです。しかし春は一度だけ
@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);
}
}
は(はい、私は毎回ではないすべてのメッセージを送信することを知っている(最初のポスト要求の後)応答を送信します良いアイデア、後で修正します)
spring.io/blogでいくつかの例を見ましたが、私の場合は動作しません。最後の行のコメントを外しても問題は解決しません。私は何をすべきか?
PS。私はEnableAsyncアノテーションを持っており、私は春のブート設定を使用しています。
私はそれを私のコンセプトではありませんでした[https://spring.io/blog/2012]/05/16/spring-mvc-3-2-preview-chat-sample /) – Kuba