Jetty Websocket客户端问题

时间:2019-11-23 13:03:59

标签: websocket jetty

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

所以,我有

public static final String SUBSCRIPTION_URL = "wss://api.tibber.com/v1-beta/gql/subscriptions";

此外,我的WS开放代码:

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

1 个答案:

答案 0 :(得分:0)

  

java.io.IOException:管道损坏

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

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

Java或Jetty也无能为力,它发生在其控制范围之外。