我有ServerEndpoint类:
@ServerEndpoint(value = "/websocket", configurator = ServletAwareConfig.class)
public class WebsocketEndpoint {
@OnOpen
public void onOpen(Session session) {
System.out.println("OnOpen");
}
@OnClose
public void onClose(Session session) {
System.out.println("OnClose");
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("OnMessage");
}
@OnError
public void onError(Throwable t) throws Throwable {
System.out.println("OnError");
}
}
当我刷新页面时,调用onError并且异常t包含下一个描述: java.util.concurrent.ExecutionException:java.net.SocketException:Broken pipe
可能是什么原因?
答案 0 :(得分:2)
当我使用Chrome或Chromium打开页面时,我遇到了同样的异常。 (当我使用Firefox时,它永远不会发生)。我不确定你是否也在使用Chrome。我想这是因为V8发动机。
我的解决方案是在离开页面之前关闭Web套接字:
window.addEventListener ("beforeunload", function(){ socket.close(); });
但是当我使用Tyrus作为我的Web套接字服务器时,我没有看到任何这样的例外。希望有人能够证明这个问题的直接原因。谢谢!