ruby - 如何等待并稍后发送对 HTTP 请求的响应?

标签 ruby http sinatra

我正在服务器端使用 Sinatra 开发一个 API。我希望发出一个 HTTP 请求,但继续挂起/等待并保持事件状态,直到稍后的事件(另一个事件)导致它在稍后的时间以特定的响应值完成。

换句话说:

get '/api/foo/:request_identifier' do
  # some code here
  wait_until_finished params[:request_identifier]
end

# When this URL is visited, the hanging request with the matching
# request identifier will complete, sending "foo response text" to the
# client.
get '/api/bar/:request_identifier' do
  make_it_finish params[:request_identifier] "foo response text"
  "bar response text"
end

我怎样才能实现这个,或者达到这个效果的东西?

我还考虑过让客户端不断向服务器发出请求,轮询已完成的请求,但大量请求可能会导致昂贵的互联网费用。

最佳答案

我会小心挂起的请求,因为这不是一个很好的用户体验。话虽这么说,如果您需要一件事先于另一件事完成,这里有一些选择:

  1. 使用 event emitter
  2. 使用 async library

如果没有您问题的完整背景,很难推荐其中之一,但是,根据您的描述,听起来“ promise ”可以解决您的问题,这是建议#2。它基本上允许您在执行第二件事之前等待一件事完成。

关于ruby - 如何等待并稍后发送对 HTTP 请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919994/

相关文章:

ruby - Bundler 未正确安装

angularjs - 在Groovy应用程序中接收Json数据

Heroku 推送被拒绝

ruby - Sinatra + Ruby : Random Number keeps changing every time I guess. 作用域问题?

ruby-on-rails - Resque: worker 状态不对

ruby-on-rails - 使用 Ruby 1.9.1/Rails 2.3.2 运行 RSpec

ruby-on-rails - 如何对现有的 gem(Rails 引擎)进行 monkeypatch?

angularjs - 将数据从 http 分配给 'this' Controller

asp.net - 在自定义 ASP.NET HttpHandler 响应中禁用缓存控制 header 字段

ruby - 使用 sinatra 流 API 的异步请求