我有一个使用分块HTTP响应的客户端。
HTTPoison.request(method, url, body, headers, stream_to: self(), timeout: 50_000, recv_timeout: 50_000)
但是,HTTPoison能够比我们更快地将消息发送到进程。进程邮箱最多收到3万条消息,并占用了我们的所有内存。 是否有任何方法可以限制HTTPoison获取和转发响应主体到此过程的速率。
如果提供更多选项,很高兴进入erlang / hackney界面。
答案 0 :(得分: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.request
和HTTPoison.stream_next
的文档。