码头http / 2保持推流开放

时间:2016-04-27 08:51:02

标签: java jetty http2

对我所拥有的一个简短的解释。

  1. 我有一个服务器和一个客户端
  2. 客户提出GET请求
  3. GET请求的流用作推送流
  4. 服务器通过单个线程中的此流将消息推送到客户端
  5. 问题是,当我没有发送数据30秒时,客户端似乎自动关闭流。

    我已经将Timout从30秒设置为LONG.MAX_VALUE:

    stream.setIdleTimeout(Long.MAX_VALUE);
    

    现在我已经实现了一个“Heartbeat-Workaround”,它每隔20秒就会推送一个简单的字符串,所以我可以避免超时。

    我只是想知道这是否是唯一的方法。或者,如果我必须更改一些我没有找到的设置。

    感谢您的回答。

    问候!

1 个答案:

答案 0 :(得分:1)

似乎你正在进行反向HTTP长轮询,这确实需要“心跳”以避免流或连接被空闲超时关闭。

通常更好的做常规HTTP长轮询(即客户端发送心跳),因为它允许服务器更快地检测断开连接的客户端。

但是,如果要执行服务器推送消息传递,最好使用CometD等解决方案。