3

我的 Play 应用程序中有一个 websocket 连接设置。该函数在下面,我正在尝试在此函数中流式传输一些数据。

当 websocket 连接建立并准备就绪时,我创建了一个while循环,该循环创建随机数以发送到 websocket 的输出流到前端。

这些是我在测试时观察到的:

  1. 如果我注释掉while循环代码并且只有前三个out.write(...),它们都会按预期到达前端。
  2. 如果我取消注释while循环代码,前端不会收到任何消息。out.write(...)如果while循环被注释 ,甚至前三个都不会出现。

这让我有点困惑。如果前三个out.write(...)消息都出去了,为什么在取消注释循环时它们和while循环out.write(...)不出去while

该循环正在运行,已通过打印语句验证,但前端没有收到任何消息。我们不能在 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());
                }
            }
        }
    };
}
4

1 回答 1

0

我没有任何关于 play 或 scala 的知识,但据我所知,你阻止了一个执行线程。

于 2013-06-26T18:26:21.963 回答