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
例外をスローせずにデータの送信を終了するには、メソッドの while ループに何を配置すればよいですか?