【发布时间】:2014-01-18 22:04:16
【问题描述】:
我一直在尝试找到一种处理异步请求和组织需要重复的作业的好方法,而 eventmachine 似乎是一个不错的方法,但我发现一些帖子试图阻止用户使用 eventmachine(例如https://github.com/kyledrake/sinatra-synchrony)。我想知道他们所指的问题是什么? (如果有人足够好,还有哪些选择?)
【问题讨论】:
标签: ruby sinatra rack eventmachine
我一直在尝试找到一种处理异步请求和组织需要重复的作业的好方法,而 eventmachine 似乎是一个不错的方法,但我发现一些帖子试图阻止用户使用 eventmachine(例如https://github.com/kyledrake/sinatra-synchrony)。我想知道他们所指的问题是什么? (如果有人足够好,还有哪些选择?)
【问题讨论】:
标签: ruby sinatra rack eventmachine
考虑到您基本上是在搜索工作队列,请查看Background Jobs at Ruby Toolbox,您会发现很多不错的选择。可管理性与速度是这样的,
DJ 速度最慢且最易于管理,而 beanstalkd 速度最快且最不易于管理。你最好的选择可能是 sidekiq 或 resque,它们都依赖于 redis 来管理他们的队列。
我不鼓励您使用 EventMachine,因为:
其实Sinatra Synchrony的人总结的不错:
不应将此 gem 用于新应用程序。这个比较好 将线程与 Ruby 一起使用,而不是 EventMachine。它也倾向于 当新版本的 ruby 出现时中断,而 EM 本身不是 维护得很好,但有一些非常基本的问题。
我不会再维护这个宝石了。如果有人有兴趣 维护它,随时询问,但我建议不要使用 不再使用 EventMachine 或 sinatra-synchrony。
【讨论】:
如果它适合您的工作流程,请使用 EM。只要您不太疯狂,回调就可以很好地使用。在我上一份工作中,我们在 EM 之上构建了很多软件。
对第三方协议的支持相当不错,看看the protocol implementations page就行了。
至于阻塞反应器,你只需要确保你不在主线程上工作,如果你这样做了,请确保它是你做的快。您可以做一些事情来确定这是否有效。最简单的就是在代码中添加延迟检查。它就像为每 x 秒添加一个定期计时器并记录一条消息一样简单(正在开发中)。打印出调用之间的时间将告诉您反应器的滞后程度。这个时间越大,你的 x 值就越多,你在主线程上做的工作就越多。
所以,我想说,你自己试试吧。试试赛璐珞,试试直线,试试 EM 与 EM-Synchrony 和纤维。
这真的取决于个人喜好。
【讨论】: