我的 Play 应用程序中有一个 websocket 连接设置。该函数在下面,我正在尝试在此函数中流式传输一些数据。
当 websocket 连接建立并准备就绪时,我创建了一个while
循环,该循环创建随机数以发送到 websocket 的输出流到前端。
这些是我在测试时观察到的:
- 如果我注释掉
while
循环代码并且只有前三个out.write(...)
,它们都会按预期到达前端。 - 如果我取消注释
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());
}
}
}
};
}