Dhe*_*dra 6 java websocket jakarta-ee
我正在使用 java-ee websockets 实现一个小型聊天应用程序。
有一次,由于各种原因,我想关闭客户端的会话,以便关闭连接。
为了关闭连接,我调用了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)
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么,也不知道为什么会出现这个异常。
Websocket OnClose 方法在会话关闭时调用,您不需要关闭会话。您想要关闭闭门会议。此错误表明会话已关闭。你可以从这里看到它:
http://docs.oracle.com/javaee/7/api/javax/websocket/Session.html
一旦会话关闭,它就不再可供应用程序使用。会话关闭后调用其任何方法(close() 方法除外)将导致抛出 IllegalStateException。开发人员应在 Endpoint.onClose(javax.websocket.Session, javax.websocket.CloseReason) 方法期间从会话中检索任何信息。遵循 Closeable 约定,在 Session 关闭后调用 Session close() 方法没有任何效果。