【问题标题】:How to limit the the rate HTTPoison, or hackney, streams a response when using the `stream_to` option使用“stream_to”选项时如何限制 HTTPoison 或 hackney 流式传输响应的速率
【发布时间】:2018-07-16 14:22:31
【问题描述】:

我有一个客户端使用分块的 HTTP 响应。

HTTPoison.request(method, url, body, headers, stream_to: self(), timeout: 50_000, recv_timeout: 50_000)

但是 HTTPoison 能够比我们处理它们更快地向进程发送消息。进程邮箱正在接收多达 30K 条消息并使用我们所有的内存。 有什么方法可以限制 HTTPoison 获取并将响应正文转发到此进程的速率。

如果提供更多选项,我们很乐意使用 erlang/hackney 界面。

【问题讨论】:

    标签: http elixir httpoison


    【解决方案1】:

    您可以通过在请求选项中传递 async: :once 然后使用 HTTPoison.stream_next/1 请求更多块来完全控制流式传输请求。

    response = HTTPoison.request!(
      method,
      url,
      body,
      headers,
      stream_to: self(),
      async: :once, # <-
      timeout: 50_000,
      recv_timeout: 50_000
    )
    

    此时您将收到一大块响应。处理完之后,您可以像这样请求更多块:

    {:ok, response} = HTTPoison.stream_next(response)
    receive do
      ...
    end
    

    直到你最终得到%HTTPoison.AsyncEnd{}

    有关详细信息,请参阅 HTTPoison.requestHTTPoison.stream_next 的文档。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多