0

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 ループに何を配置すればよいですか?

4

1 に答える 1