簡體   English   中英

Java WebSocket-立即關閉連接

[英]Java websocket - close connection immediately

在我的Java websocket中,我想在建立連接后立即關閉連接。

服務器

@ServerEndpoint(value = "/server") 
public class Server {
private static final long serialVersionUID = 1L;
private Session session;

@OnOpen
public void onOpen(Session session) throws IOException {
    System.out.println("Server Websocket open");
    this.session = session;
    try {
        session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "No Token"));
    } catch (IOException e) {
        e.printStackTrace();
    }

}


@OnMessage
public void onMessage(String message) {
    System.out.println("server receives: "+message);
}

@OnClose
public void onClose(Session session) {
    System.out.println("Server session closed");
    session = null;
}

客戶

@ClientEndpoint 
public class Client {

public static void main(String[] args) {

    WebSocketContainer container = null;

    container = ContainerProvider.getWebSocketContainer();
    try {
        Session session = container.connectToServer(Client.class, URI.create("ws://localhost:8080/WebsocketServer/server"));
    } catch (DeploymentException | IOException e) {
        e.printStackTrace();
    }

}

@OnOpen
public void onOpen(Session p) {
    try {
        for (int i = 0; i < 10; i++) {
            p.getBasicRemote().sendText("Hello! ");

            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
        p.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@OnClose
public void OnClose() {
    System.out.println("Client connection closed");
}

盡管連接已在服務器類的onOpen方法中關閉,但它仍從客戶端接收消息。

server receives: Hello! 
server receives: Hello! 
server receives: Hello! 
server receives: Hello! 
...

盡管已調用close方法,但為什么連接仍保持打開狀態並接收消息?

因為優雅地關閉ws連接是一個異步過程。 您的服務器發送關閉消息,但是直到服務器收到客戶端的關閉回復后,連接才會關閉。 根據您的觀察,客戶很可能已經發送了10個“ Hello!”。 消息甚至開始處理來自服務器的關閉消息。 因此,就服務器而言,連接仍處於打開狀態,這就是為什么它會打印“服務器接收”消息的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM