gpt4 book ai didi

Java websocket - 立即关闭连接

转载 作者:行者123 更新时间:2023-12-01 09:17:14 28 4
gpt4 key购买 nike

在我的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!”在它开始处理来自服务器的关闭消息之前。因此,就服务器而言,连接仍然打开,这就是它打印“服务器接收”消息的原因。

关于Java websocket - 立即关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com