Ruby EventMachine的问题(并研究Sinatra异步)

Ruby EventMachine的问题(并研究Sinatra异步),ruby,sinatra,rack,eventmachine,Ruby,Sinatra,Rack,Eventmachine,我一直在试图找到一种处理异步请求和组织需要重复的作业的好方法,eventmachine似乎是一种好方法,但我发现一些帖子试图阻止用户使用eventmachine(例如)。我想知道他们指的是什么问题?(如果有人对你足够好,还有什么选择呢?考虑到你基本上是在寻找一个工作队列,看看,你会发现很多好的选择。可管理性与速度的对比是这样的 延迟工作 Sidekiq/Resque 豆茎 DJ是最慢和最易管理的,而Beanstalk是最快和最难管理的。您最好的选择可能是sidekiq或resque,它们都依赖r

我一直在试图找到一种处理异步请求和组织需要重复的作业的好方法,eventmachine似乎是一种好方法,但我发现一些帖子试图阻止用户使用eventmachine(例如)。我想知道他们指的是什么问题?(如果有人对你足够好,还有什么选择呢?

考虑到你基本上是在寻找一个工作队列,看看,你会发现很多好的选择。可管理性与速度的对比是这样的

  • 延迟工作
  • Sidekiq/Resque
  • 豆茎
  • DJ是最慢和最易管理的,而Beanstalk是最快和最难管理的。您最好的选择可能是sidekiq或resque,它们都依赖redis来管理队列

    我不鼓励您使用EventMachine,因为:

  • 很难解释反应堆的模式
  • 光纤将反应器模式的“末日”回调金字塔分解为同步外观的代码,但第三方应用程序中的光纤支持往往会让你感到痛苦
  • 当涉及到与网络相关的代码时,您仅限于一个非常有限的生态系统
  • 很难不堵住反应堆,而且当你堵住反应堆的时候也很难抓住它
  • 后台处理已经有了完善的解决方案,您不需要自己编写代码
  • 它实际上不再维护,只需查看上一个提交和问题列表
  • 有和
  • 实际上,Sinatra Synchrony的人总结得很好:

    新申请不应考虑此gem。更好 在Ruby中使用线程,而不是EventMachine。它也倾向于 当ruby的新版本发布时中断,而EM本身不是 保养得很好,有一些基本问题

    我不会再维护这个宝石了。如果有人对 维护它,请随意查询,但我建议不要使用 EventMachine或sinatra同步


    如果符合您的工作流程,请使用EM。只要你不太疯狂,回调可以很好地使用。在我的上一份工作中,我们在EM上构建了很多软件

    对第三方协议有很好的支持,看看吧

    至于阻塞反应堆,你只需要确保你没有在主线程上工作,如果你做了,确保你的工作做得很快。您可以做一些事情来确定这是否有效。最简单的方法就是在代码中添加延迟检查。它很简单,只需为每x秒添加一个周期计时器并记录一条消息(在开发中)。打印出两次通话之间的时间会告诉你反应堆的滞后程度。这一时间的x值越大,在主线程上所做的工作就越多

    所以,我想说,你自己试试吧。尝试赛璐珞,尝试直起线,尝试EM同步和纤维

    这实际上归结于个人偏好