2016-04-11 18 views
0

私のアプリではチャットのようなものを作成したいと思いますが、リアルタイムで変更をキャプチャする際に問題があります。 私の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アノテーションを持っており、私は春のブート設定を使用しています。

答えて

0

get()メソッドでは、空のDeferredResultをmessagesQueueに追加してクライアントに返します。私は見ることができません、どのようなキューで起こるが、非常に可能性が高いそれはまだ空です。

postMessage()では、結果を準備しますが、返さないでください。

GETに書き込み、PUTで​​読むのはちょっと変わったようです。 あなたは実際にあなたが達成したいことを考え直さなければならないかもしれないと思います。

+0

私はそれを私のコンセプトではありませんでした[https://spring.io/blog/2012]/05/16/spring-mvc-3-2-preview-chat-sample /) – Kuba

関連する問題