gpt4 book ai didi

java - 如何正确关闭java-ee websocket连接

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:44 27 4
gpt4 key购买 nike

我正在使用 java-ee websockets 实现一个小型聊天应用程序。
有一次我出于各种原因想关闭客户端的 session ,以便关闭连接。
为了关闭连接,我调用了 onClose 函数,并在该函数中调用了 session.close() 但是之后我得到了以下错误:

java.lang.IllegalStateException: The WebSocket session has been closed and no method (apart from close()) may be called on a closed session
at org.apache.tomcat.websocket.WsSession.checkState(WsSession.java:643)
at org.apache.tomcat.websocket.WsSession.addMessageHandler(WsSession.java:168)
at org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:81)
at org.apache.tomcat.websocket.pojo.PojoEndpointServer.onOpen(PojoEndpointServer.java:70)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:129)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:629)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

我不确定自己做错了什么,也不知道为什么会出现这个异常。

最佳答案

我今天开始学习这些东西时遇到了同样的问题。

到目前为止我发现的是,当服务器通过调用 session.close 接收到“退出”消息时,我在服务器上的注释 @OnMessage 上关闭了连接。然后在 @OnMessage 的末尾,我发出了强制返回,因为该方法需要返回,并且由于 session 已经关闭,返回抛出了异常。

我的解决方案不是让服务器关闭 session ,而是向客户端发送一条消息“youquit”,然后让客户端调用 session.close。

服务器现在收到关闭事件并准备好进行下一次连接,客户端无一异常(exception)地结束。

@OnMessage
public String onMessage(String message, Session session) throws DeploymentException, IOException {
switch (message) {
case "quit":
//session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "Game ended"));
message = "you" + message;
break;
}
return message;
}

@OnClose
public void onClose(Session session, CloseReason closeReason) {
logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason));
}

我试图在返回级别捕获异常,但它不起作用。

我现在认为您无法在@OnMessage 入口点关闭连接。

关于java - 如何正确关闭java-ee websocket连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26558373/

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