如何使用 HTTPoison 发出异步请求?
How to make async requests using HTTPoison?
背景
我们有一个每秒处理大量请求的应用程序。此应用程序需要通过 HTTPS 向我们的服务器之一发出 GET 调用来通知外部服务。
Objective
这里的objective是使用HTTPoison来进行异步GET请求。我真的不关心请求的响应,我只关心它们是否失败,所以我可以将任何可能的错误写入记录器。
如果成功了我什么都不想做。
研究
我查看了 HTTPoison 的官方文档,发现它们支持异步请求:
https://hexdocs.pm/httpoison/readme.html#usage
但是,我对这种方法有 2 个问题:
- 他们使用
flush
来表示请求已完成。我无法登录应用程序并手动 flush
来查看请求的进展情况,这太疯狂了。
- 当我们收到响应或错误时,它们不会显示任何通知机制。
所以,我有一个简单的问题:
- 如何异步通知我的请求失败或成功?
我假定默认 HTTPoison.get
是同步的,如文档中所示。
这可以通过为每个请求生成一个新进程来实现。考虑这样的事情:
notify = fn response ->
# Any handling logic - write do DB? Send a message to another process?
# Here, I'll just print the result
IO.inspect(response)
end
spawn(fn ->
resp = HTTPoison.get("http://google.com")
notify.(resp)
end) # spawn will not block, so it will attempt to execute next spawn straig away
spawn(fn ->
resp = HTTPoison.get("http://yahoo.com")
notify.(resp)
end) # This will be executed immediately after previoius `spawn`
请看一下我在这里指出的 spawn/1
的文档。
希望对您有所帮助!
背景
我们有一个每秒处理大量请求的应用程序。此应用程序需要通过 HTTPS 向我们的服务器之一发出 GET 调用来通知外部服务。
Objective
这里的objective是使用HTTPoison来进行异步GET请求。我真的不关心请求的响应,我只关心它们是否失败,所以我可以将任何可能的错误写入记录器。
如果成功了我什么都不想做。
研究
我查看了 HTTPoison 的官方文档,发现它们支持异步请求:
https://hexdocs.pm/httpoison/readme.html#usage
但是,我对这种方法有 2 个问题:
- 他们使用
flush
来表示请求已完成。我无法登录应用程序并手动flush
来查看请求的进展情况,这太疯狂了。 - 当我们收到响应或错误时,它们不会显示任何通知机制。
所以,我有一个简单的问题:
- 如何异步通知我的请求失败或成功?
我假定默认 HTTPoison.get
是同步的,如文档中所示。
这可以通过为每个请求生成一个新进程来实现。考虑这样的事情:
notify = fn response ->
# Any handling logic - write do DB? Send a message to another process?
# Here, I'll just print the result
IO.inspect(response)
end
spawn(fn ->
resp = HTTPoison.get("http://google.com")
notify.(resp)
end) # spawn will not block, so it will attempt to execute next spawn straig away
spawn(fn ->
resp = HTTPoison.get("http://yahoo.com")
notify.(resp)
end) # This will be executed immediately after previoius `spawn`
请看一下我在这里指出的 spawn/1
的文档。
希望对您有所帮助!