Jetty websocket客户端问题

Jetty websocket客户端问题,websocket,jetty,Websocket,Jetty,使用EclipseIDE尝试为OpenHab项目创建java websocket客户端,从而使用默认的Jetty websocket库。OpenHab项目打算连接到需要令牌授权的websocket端点,发送请求消息并检索实时/连续测量 所以,我有 public static final String SUBSCRIPTION_URL = "wss://api.tibber.com/v1-beta/gql/subscriptions"; 此外,我的WS-open代码: public void o

使用EclipseIDE尝试为OpenHab项目创建java websocket客户端,从而使用默认的Jetty websocket库。OpenHab项目打算连接到需要令牌授权的websocket端点,发送请求消息并检索实时/连续测量

所以,我有

public static final String SUBSCRIPTION_URL = "wss://api.tibber.com/v1-beta/gql/subscriptions";
此外,我的WS-open代码:

public void open() throws Exception {
    if (isConnected()) {
        logger.warn("Open: connection is already open");
    }
    logger.warn("Connecting to: {}", SUBSCRIPTION_URL);

    sslContextFactory = new SslContextFactory(true);
    sslContextFactory.setTrustAll(true);

    client = new WebSocketClient(sslContextFactory);
    client.setMaxIdleTimeout(360 * 1000);

    TibberWebSocketListener socket = new TibberWebSocketListener();

    request = new ClientUpgradeRequest();
    String token = new StringBuilder("Bearer ").append(configuration.getToken()).toString();
    request.setHeader("Authorization", token);
    request.setSubProtocols("graphql-subscriptions");

    client.start();
    client.connect(socket, new URI(SUBSCRIPTION_URL), request);

}
然而,通过这段代码,我似乎连接了,但最终出现了一个IOException:1分钟后管道破裂。如果我只是在没有消息的情况下连接/在发送消息的情况下连接,则会出现相同的错误

   13:59:15.987 [safeCall-1] WARN  o.o.b.t.i.handler.TibberHandler:346 - Connecting to: wss://api.tibber.com/v1-beta/gql/subscriptions
13:59:16.390 [@1379116703-141] WARN  o.o.b.t.i.handler.TibberHandler:385 - Connected to Server
14:00:16.430 [@1379116703-142] WARN  o.o.b.t.i.handler.TibberHandler:392 - Closing a WebSocket due to Disconnected
14:00:16.434 [@1379116703-139] WARN  o.o.b.t.i.handler.TibberHandler:399 - Error during websocket communication: Broken pipe
java.io.IOException: Broken pipe
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:928)
    at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422)
    at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277)
    at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381)
    at org.eclipse.jetty.websocket.common.io.FrameFlusher.flush(FrameFlusher.java:264)
    at org.eclipse.jetty.websocket.common.io.FrameFlusher.process(FrameFlusher.java:193)
    at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241)
    at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.outgoingFrame(AbstractWebSocketConnection.java:516)
    at org.eclipse.jetty.websocket.client.io.WebSocketClientConnection.outgoingFrame(WebSocketClientConnection.java:72)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.close(AbstractWebSocketConnection.java:184)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:458)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:428)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:426)
    at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:320)
    at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:158)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
    at java.lang.Thread.run(Thread.java:748)
14:00:16.435 [@1379116703-139] WARN  o.o.b.t.i.handler.TibberHandler:392 - Closing a WebSocket due to Broken pipe
java.io.IOException:管道破裂

这意味着Java(和Jetty)下的操作系统或网络检测到连接已关闭

“管道破裂”实际上相当普遍,尤其是在移动设备或无线网络中

Java或Jetty对此也无能为力,它的发生超出了它的控制范围