我正在使用Jetty的WebSocket API将数据流式传输到客户端。一旦客户端连接到服务器,服务器将定期向客户端发送json数据。
@WebSocket
public class WSHandler {
// send data every 10 seconds
public static final long PERIOD = 10000L;
@OnWebSocketClose
public void onClose(int statusCode, String reason) {
}
@OnWebSocketError
public void onError(Throwable t) {
}
@OnWebSocketConnect
public void onConnect(Session session) {
System.out.println("Connect: " + session.getRemoteAddress().getAddress());
try {
while(...) {
session.getRemote().sendString(json);
Thread.sleep(PERIOD);
}
} catch (IOException | InterruptedException e ) {
e.printStackTrace();
}
}
@OnWebSocketMessage
public void onMessage(String message) {
}
}
我想要做的是,一旦客户端决定终止连接,服务器就会停止发送json数据(它确实停止了,但它看起来不合理,在服务器上抛出EOFException,IOException或损坏的管道或其他东西侧)。
我已经尝试使用一个全局布尔变量,在false
中转换onClose
并将其放在while
循环上,但这似乎不起作用。
我应该在onConnect
方法的循环中使用什么来循环终止数据发送而不抛出异常?
答案 0 :(得分:1)
您的代码永远不会让主Parse / Event Handling线程处理其他任何内容。
您永远不会从onConnect
返回,这是强制性的。
关闭新线程以发送这些消息。这将允许来自远程的后续传入帧由实现处理。
检测到关闭时,会话将无效。无论是来自有效的近距离握手,还是来自异常的收盘,还是来自严酷的收盘。
您还可以使用while(session.isOpen()) { }
作为附加防范,但请记住,它还需要能够处理更多传入帧。