3

Play アプリケーションで websocket 接続をセットアップしました。関数は以下にあり、この関数でいくつかのデータをストリーミングしようとしています。

Websocket 接続がセットアップされ、準備が整ったら、whileWebsocket のアウト ストリームからフロント エンドに送信される乱数を作成するループを作成します。

これらは、これをテストしたときに観察したことです。

  1. whileループ コードをコメント アウトし、最初の 3 つだけがあればout.write(...)、それらはすべて期待どおりにフロント エンドに到達します。
  2. ループ コードのコメントを外すとwhile、フロント エンドでメッセージが受信されません。ループがコメント化 out.write(...)されている場合は、最初の 3 つでさえありません。while

これには少し困惑しています。最初の 3 つの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());
                }
            }
        }
    };
}
4

1 に答える 1

0

私は遊びやスカラについての知識はありませんが、私が理解しているように、あなたは実行のスレッドをブロックしています。

于 2013-06-26T18:26:21.963 に答える