我们要求在for循环中向前端发送消息,我们考虑使用websocket来实现这一点。
我们的Js代码(前端 - 这里wsInterfaceBulkChecks是元素id @html页面)
var intWebsocket = function () {
var wsUrl = 'ws://localhost:9000/bvWSInterface';
var WS = window['MozWebSocket'] ? window['MozWebSocket'] : WebSocket;
var socket = new WS(wsUrl);
$('#wsInterfaceBulkChecks').data('wsObj', socket);
socket.onmessage = function(event) {
console.log(event.data);
}
}
路由器配置 GET / bvWSInterface @ controllers.admin.BulkChecks.bvWSInterface()
Java代码
public WebSocket<String> bvWSInterface() {
return new WebSocket<String>() {
// called when websocket handshake is done
public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out) {
for (int i=0; i<5; i++) {
out.write("Count: " + i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
问题是它在html调试器窗口一次打印0到4(没有任何延迟 - websocket同时向控制台发送所有4个)。我们的期望如下
打印0 - &gt;等待2秒
打印1 - &gt;等待2秒等。
为什么Web套接字会将所有0-4条消息一次性发送到前端? (我们相信它应该在它发生时发送 - 在发送到前端的消息之间间隔2秒)。请帮助我们解决这个问题。
答案 0 :(得分:1)
试试这个
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<5; i++) {
out.write("Count: " + i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();