停止WebSocket发送数据

时间:2015-09-16 12:26:28

标签: embedded-jetty java-websocket

我正在使用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方法的循环中使用什么来循环终止数据发送而不抛出异常?

1 个答案:

答案 0 :(得分:1)

您的代码永远不会让主Parse / Event Handling线程处理其他任何内容。

您永远不会从onConnect返回,这是强制性的。

关闭新线程以发送这些消息。这将允许来自远程的后续传入帧由实现处理。

检测到关闭时,会话将无效。无论是来自有效的近距离握手,还是来自异常的收盘,还是来自严酷的收盘。

您还可以使用while(session.isOpen()) { }作为附加防范,但请记住,它还需要能够处理更多传入帧。