Play アプリケーションで websocket 接続をセットアップしました。関数は以下にあり、この関数でいくつかのデータをストリーミングしようとしています。
Websocket 接続がセットアップされ、準備が整ったら、while
Websocket のアウト ストリームからフロント エンドに送信される乱数を作成するループを作成します。
これらは、これをテストしたときに観察したことです。
while
ループ コードをコメント アウトし、最初の 3 つだけがあればout.write(...)
、それらはすべて期待どおりにフロント エンドに到達します。- ループ コードのコメントを外すと
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());
}
}
}
};
}