Play Framework ws libray 流方法在连接 2 分钟后停止

Play Framework ws libray stream method stops after 2 minutes on connection

我正在使用 Play 2.6 和推特流 API。 下面是我如何使用 ws 库的 stream() 方法连接到 Twitter。

问题是,蒸汽总是在刚好 2 分钟后停止。我尝试了不同的主题,行为非常一致。 好像有设置,但是我没找到。

我不确定它是在游戏端还是推特端。 非常感谢任何帮助。

  ws.url("https://stream.twitter.com/1.1/statuses/filter.json")
          .sign(OAuthCalculator(ConsumerKey(credentials._1, credentials._2), RequestToken(credentials._3, credentials._4)))
          .withQueryStringParameters("track" -> topic)
          .withMethod("POST")
          .stream()
          .map {
            response => response.bodyAsSource.map(t=> {t.utf8String})
          }

Play WS 有默认的请求超时时间,默认为 2 分钟。 这是文档的 link: https://www.playframework.com/documentation/2.6.x/ScalaWS#Configuring-Timeouts

所以你可以把你的application.conf行写成

play.ws.timeout.request = 10 minutes

为所有请求指定默认超时。

您还可以使用 WSRequest 构建器

withRequestTimeout 方法为单个请求指定超时
/**
 * Sets the maximum time you expect the request to take.
 * Use Duration.Inf to set an infinite request timeout.
 * Warning: a stream consumption will be interrupted when this time is reached unless Duration.Inf is set.
 */
def withRequestTimeout(timeout: Duration): WSRequest

因此,要禁用单个请求的请求超时,您可以使用以下代码

ws.url(someurl)
      .withMethod("GET")
      .withRequestTimeout(Duration.Inf)