播放框架websocket在发生时不会向前端发送消息

时间:2017-06-21 07:16:36

标签: javascript java playframework websocket

我们要求在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秒)。请帮助我们解决这个问题。

1 个答案:

答案 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();