代码之家  ›  专栏  ›  技术社区  ›  Flame_Phoenix

如何使用httpoison发出异步请求?

  •  0
  • Flame_Phoenix  · 技术社区  · 6 年前

    背景

    我们有一个每秒处理大量请求的应用程序。这个应用程序需要通过https向我们的一个服务器发出get调用来通知外部服务。

    目标

    这里的目标是使用httpoison发出异步get请求。我并不真正关心请求的响应,我只关心知道它们是否失败,所以我可以将任何可能的错误写入日志记录器。

    如果成功了,我什么都不想做。

    研究

    我已经检查了httpoison的官方文档,我发现它们支持异步请求:

    https://hexdocs.pm/httpoison/readme.html#usage

    但是,我对这种方法有两个问题:

    1. 他们使用 flush 以显示请求已完成。我无法登录应用程序并手动 脸红 要想知道请求的进展如何,那就太疯狂了。
    2. 当我们得到响应或错误时,它们不显示任何通知机制。

    所以,我有一个简单的问题:

    1. 如何异步通知我的请求失败或成功?

    我假设违约 HTTPoison.get 是同步的,如文档中所示。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Paweł Dawczak    6 年前

    这可以通过根据请求生成一个新进程来实现。考虑一下:

    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 我已经在这里指出了。

    希望有帮助!