1

我有 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

可能是什么原因?

4

1 回答 1

2

当我使用 Chrome 或 Chromium 打开页面时,我遇到了同样的异常。(当我使用 Firefox 时,它永远不会发生)。我不确定你是否也在使用 Chrome。我猜是因为V8引擎。

我的解决方案是在离开页面之前关闭网络套接字:

window.addEventListener ("beforeunload", function(){ socket.close(); });

但是当我使用Tyrus作为我的网络套接字服务器时,我没有看到任何这样的异常。希望有人能说明这个问题的直接原因。谢谢!

于 2014-09-16T15:45:05.480 回答