EventMachine vs Node.js

Pab*_* B. 30 ruby-on-rails event-driven eventmachine commonjs node.js

我将开发一个协作网站,其中一个功能将是实时更改的协作编辑.即,当两个或更多用户正在编辑同一个文档时,他们可以在发生时立即看到彼此的变化.我对Ruby on Rails有一些经验,所以我在考虑使用EventMachine,但是围绕Node.js的所有这些炒作,我知道考虑使用它.那么,使用Node.js而不是EventMachine的主要好处是什么?

tl; dr EventMachine和Node.js之间的主要区别是什么(除了语言)?

Phi*_*lak 72

EventMachine与Rails无关,除了它们都是用同一种语言编写的.您可以像Node.js一样使用EventMachine; 您所要做的就是不向您的项目添加库.根据我的经验,EventMachine库(如em-http)比Node的任何东西都要好得多.你可以使用光纤而不是回调来避免回调地狱.由于所有的回调,在Node中几乎不可能完成异常处理.Plus Ruby是一种比Javascript更好,更完整的语言.

  • 如果在Node.js中使用Deferreds和Promises(非常常见),可以非常好地使用异步代码中的异常处理.例如,参见https://github.com/kriskowal/q (7认同)
  • 我想知道@Phill Kulak,到2014年你的答案是否会一样? (3认同)
  • @scaryguy嗯,我觉得EM在这一点上是垃圾箱,所以可能不是! (3认同)

Chr*_*ber 21

我倾向于"使用你所知道的"(即使它是一个更重的架构).因此,我认为它不像"EventMachine vs NodeJS"那么简单.主要是,差异可归纳为:

  • NodeJS是一种框架/语言,用于处理JavaScript中基于事件的编程.这是它的推动力.这不是一个思想或第三方机制.它已经融入了语言.您创建回调/事件,因为这是语言的构建方式.它不是第三方插件,也不会改变您的工作流程.
  • EventMachine是Ruby中的一个gem,它使开发人员能够访问基于事件的编程模型的一些优点.它经过大量使用和测试,但没有直接用于语言.两者都被锁定到一个CPU,但是在Nodes核心的事件编程中,它仍然有一个优势.Ruby并没有考虑并发性.

也就是说,可以克服技术问题.应该指导您做出决定的更重要的问题(我认为)是:

  • 您的生产环境会是什么样子?您是否完全控制服务器?你可以随意举办吗?或者它将在共享系统上开始,然后你必须扩展它?
  • 您团队中的所有开发人员是否都能够非常快速地学习新语言?他们能够以多快的速度理解基于事件的语言,例如中间层的JavaScript?
  • 您是否需要Rails为您提供的所有架构(完整的测试框架,脚手架,模型,控制器等)?或者那有点矫枉过正?

两者之间存在相当多的技术差异.一种是语言,一种是框架.真的,你想要运行的堆栈有多重?您的开发人员需要做多少学习?你想要一个完整的堆栈给你很多细节,你可能不会使用,或者你想要一个非常快速和并发运行的裸骨设置,即使你可能需要编写额外的锅炉板代码并学习新的语言?

虽然Rails并不像某些Web应用程序架构那么重,但您仍然需要比处理NodeJS中类似数量的吞吐量更多的处理器能力.假设两个系统的质量代码.写在任一堆栈上的错误代码将阻止堆栈闪亮.这真的归结为 - 你真的想学习一种全新的做事方式,或者利用你目前对Ruby的理解来快速实现目标吗?

我知道这不是一个明确的答案,但我希望这有助于指导您做出决定!

  • ruby库如何直接需要ruby框架?您可以轻松地将事件机器与轨道分开使用.我根本不明白这个答案.Javascript不是基于事件的,但您可以将其用于基于事件的编程.这个答案包含错误的信息. (21认同)
  • 对.这就是我做出决定的方式.它们都是完全可以接受的事件机制(尽管事件是Node.js的核心,因为这就是语言实际编写的方式),这是一个问题,你想在这些系统周围构建多少架构. (3认同)
  • 我在这里同意SpaceGhost.Javascript可用于事件,但不是事件驱动的语言.另外,在@Chris Rueber中,你提到在JavaScript中传递函数就像使用Node.js一样有优势,但Ruby也支持函数作为一等公民,所以两者都是如此. (2认同)

Nei*_*ton 8

值得一提的是制作故事.EM与大多数Rack一样,有大量的测试和监控工具可供测试,而Node.js在这方面做得很差.

在撰写本文时,似乎几乎不可能从Node获得明确的指标来回答诸如"我是否需要扩展"之类的问题.Joyent这样的选择开始形成,并且总是自己动手论证,但NewRelic等工具附近没有任何选择.

Node.js的是从一个性能/配置性点非常好,但我个人不会在生产环境中托管它只是还没有.