我向另一台服务器发出请求,作为我的Sinatra应用程序的POST方法的一部分。我用来发出请求的库是一个EventMachine库,当发出请求时立即返回一个EM :: Deferrable对象,但是我需要在控制器方法中阻塞,直到异步请求完成,这样我才能返回一个partial数据在请求中返回。这样做的最佳方法是什么?如何阻止EventMachine可延迟对象?
0
A
回答
1
一个解决方案是使用async_sinatra和基于EM的网络服务器,如Thin。使用async_sinatra,您将有一个body
方法进行显式呈现。它会这样工作:
require 'sinatra/async'
require 'em-http-request'
class Application < Sinatra::Base
register Sinatra::Async
apost '/' do
http = EM::HttpRequest.new('http://www.google.de/').get
http.callback do
body do
# your http processing in here, will be rendered
end
end
http.errback do
body { 'error' }
end
end
end
+0
这工作完美。谢谢! – Bryan
0
当你封堵一个API时,你会遇到两个世界中最糟糕的情况。
我会尽量避免通过EM调用,以支持更多'传统'方法(a-la curl)。
如果这是不可能的,那么我会返回一个空的部分,并让客户端轮询服务器的更新。
相关问题
- 1. EventMachine延迟回调链
- 2. 延迟或阻止Windows休眠/关机
- 3. 递归Ajax延迟对象
- 4. AppEngine持久对象延迟?
- 5. 延迟加载Flash对象
- 6. 递归Ajax延迟对象
- 7. EventMachine的可以使用的时候不响应延迟
- 8. 带延迟的阻塞/非阻塞
- 9. 如何阻止WPF中的WebBrowser对象?
- 10. 如何阻止PowerShell解包Enumerable对象?
- 11. 如何防止菜单栏延迟?
- 12. 如何停止触发的延迟?
- 13. 我可以解析函数作用域延迟对象还是必须传递延迟对象?
- 14. 如何延迟
- 15. 如何阻止Android评分栏蔓延?
- 16. 添加可延迟事件的延迟
- 17. 每个对象的可可工具提示延迟?
- 18. 救援EventMachine中的错误::可推迟
- 19. 如何防止对TCP套接字的延迟回复?
- 20. getPage里面的延迟对象打印?
- 21. 对象拖动延迟问题
- 22. AWS CloudFront根对象更新延迟
- 23. 在jQuery中使用延迟对象
- 24. NHibernate延迟加载和对象比较
- 25. 科特林对象加载延迟
- 26. AngularJS延迟对象的行为
- 27. 验证关联对象(延迟验证)
- 28. 意外的延迟对象的行为
- 29. 抓分开使用延迟对象
- 30. 延迟加载不新增对象
您是否正在使用像瘦的EM网络服务器? – tbuehlmann