Java Play Framework 2.1 websockets流媒体数据不工作

Java Play Framework 2.1 websockets流媒体数据不工作,java,websocket,playframework-2.0,Java,Websocket,Playframework 2.0,我在Play应用程序中设置了websocket连接。下面是函数,我试图在这个函数中流式传输一些数据 当websocket连接设置好并准备就绪时,我创建了一个while循环,该循环创建随机数,将其发送到websocket的输出流中,并发送到前端 以下是我在测试时观察到的情况: 如果我在循环代码时注释掉,并且只注释掉前三个 如果在循环代码时取消注释,前端将不会收到任何消息。甚至前三个都没有输出。如果while循环被注释,则写入(…) 这让我有点困惑。如果前三条out.write(…)消息熄灭,为什么

我在Play应用程序中设置了websocket连接。下面是函数,我试图在这个函数中流式传输一些数据

当websocket连接设置好并准备就绪时,我创建了一个
while
循环,该循环创建随机数,将其发送到websocket的输出流中,并发送到前端

以下是我在测试时观察到的情况:

  • 如果我在循环代码时注释掉
    ,并且只注释掉前三个
  • 如果在循环代码时取消注释
    ,前端将不会收到任何消息。甚至前三个
    都没有输出。如果
    while
    循环被注释,则写入(…)
    这让我有点困惑。如果前三条
    out.write(…)
    消息熄灭,为什么它们和
    while
    循环
    out.write(…)
    while
    循环未注释时不熄灭

    循环通过print语句验证运行,但前端没有收到任何消息。我们不能在websocket的循环中调用'out.write(…)'吗

       public static WebSocket<String> realTimeChartConnection() {
        return new WebSocket<String>() {
            // called when the websocket is established
            public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out) {
                // register a callback for processing instream events
                in.onMessage(new Callback<String>() {
                    public void invoke(String event) {
                        System.out.println(event);
                    }
                });             
                System.out.println("Websocket Connection ready ...");
    
                out.write("50");
                out.write("51");
                out.write("60");
    
                int prev = 50;
                while (true) {
                    int y = (int) (prev + Math.random() * 10 - 5);
                    if (y < 0)
                        y = 0;
                    if (y > 100)
                        y = 100;
                    out.write(""+y);
                    try {
                        Thread.currentThread();
                        Thread.sleep(30);
                    } catch (Exception e) {
                        System.out.println(e.getStackTrace());
                    }
                }
            }
        };
    }
    
    公共静态WebSocket realTimeChartConnection(){
    返回新的WebSocket(){
    //在建立websocket时调用
    public void onReady(WebSocket.In,WebSocket.Out){
    //注册用于处理流内事件的回调
    in.onMessage(新回调(){
    公共void调用(字符串事件){
    系统输出打印项次(事件);
    }
    });             
    System.out.println(“Websocket连接就绪…”);
    填写(“50”);
    填写(“51”);
    填写(“60”);
    int prev=50;
    while(true){
    int y=(int)(prev+Math.random()*10-5);
    if(y<0)
    y=0;
    如果(y>100)
    y=100;
    out.写出(“+y”);
    试一试{
    Thread.currentThread();
    睡眠(30);
    }捕获(例外e){
    System.out.println(e.getStackTrace());
    }
    }
    }
    };
    }
    
    我对play或scala没有任何了解,但据我所知,您阻止了执行线程