我将开发一个协作站点,其中一个功能将是具有实时更改的协作编辑。即当两个或更多用户正在编辑同一个文档时,他们可以看到彼此的变化,一旦发生。我有一些使用 Ruby on Rails 的经验,所以我在考虑使用 EventMachine,但是由于围绕 Node.js 的所有这些炒作,我知道我正在考虑使用它。那么,使用 Node.js 而不是 EventMachine 的主要好处是什么?
tl;dr EventMachine 和 Node.js 之间的主要区别是什么(除了语言)?
我将开发一个协作站点,其中一个功能将是具有实时更改的协作编辑。即当两个或更多用户正在编辑同一个文档时,他们可以看到彼此的变化,一旦发生。我有一些使用 Ruby on Rails 的经验,所以我在考虑使用 EventMachine,但是由于围绕 Node.js 的所有这些炒作,我知道我正在考虑使用它。那么,使用 Node.js 而不是 EventMachine 的主要好处是什么?
tl;dr EventMachine 和 Node.js 之间的主要区别是什么(除了语言)?
EventMachine 与 Rails 没有任何关系,只是它们都是用同一种语言编写的。你可以让 EventMachine 像 Node.js 一样裸露;您所要做的就是不要将库添加到您的项目中。根据我的经验,EventMachine 库(如 em-http)比 Node.js 的任何库都好得多。您可以使用纤维代替回调来避免回调地狱。由于所有的回调,在 Node 中完成异常处理几乎是不可能的。此外,Ruby 是一种比 Javascript 更好、更完整的语言。
我倾向于“使用你所知道的”(即使它是一个更重的架构)。因此,我认为它不像“EventMachine vs NodeJS”那么简单。主要可以总结如下:
也就是说,可以克服技术问题。应该指导您做出决定的更重要的问题(在我看来)是:
两者之间存在相当多的技术差异。一个是语言,一个是框架。真的,你想运行多重的堆栈?您的开发人员需要学习多少?您是否想要一个完整的堆栈来为您提供很多您可能不会使用的细节,或者您是否想要一个运行速度极快且并发的基本框架,即使您可能需要编写额外的样板代码并学习新语言?
尽管 Rails 不像某些 Web 应用程序架构那么重,但您仍然需要比在 NodeJS 中处理类似数量的吞吐量所需的更多处理器能力。假设两个系统的质量代码。在任一堆栈上编写的错误代码都会阻止堆栈发光。这真的归结为——你真的想学习一种全新的做事方式,还是想利用你目前对 Ruby 的理解来快速开始工作?
我知道这不是一个确定的答案,但我希望这有助于指导您做出决定!
值得一提的是制作故事。EM,像大多数 Rack 东西一样,有大量可用的测试和监控工具经过良好测试,而 Node.js 在这方面远远不够。
在撰写本文时,似乎几乎不可能从 Node 获得明确的指标来回答“我是否需要扩展”之类的问题。Joyent 之类的选择开始形成,而且总是自己动手的论点,但在 NewRelic 等工具附近没有任何选择。
从性能/可配置性的角度来看,Node.js 非常好,但我个人还不会在生产环境中托管它。
节点.js
您可以更好地控制对正在发生的事情的低级别控制。您可以包含构建在 node.js 之上的通用库,以根据自己的喜好调整抽象级别。例如,您可以使用 connect 或 express,具体取决于您是否需要为您编写的视图引擎。您可以使用 socket.io 或现在取决于您希望您的客户端-服务器连接抽象多少。您可以选择包含众多 MVC 库中的任何一个或编写自己的库。
事件机
一个类似于 node.js 的异步 IO 库
它归结为 Ruby 与 JavaScript 的偏好,抽象或缺乏抽象需要多大的灵活性,以及是否要将节点用作实际的 Web 服务器。
已经提出了混乱的详细视图......只是个人观点
[] node.js 会更好,如果你准备好比你想象的更多地学习和实验,因为:
它的线程机制很棒(灵感来自 'erlang')
您可以(轻松地)构建一个特定用途的服务器,这将是真正的生产力