当前位置:  开发笔记 > 编程语言 > 正文

Node.js或Erlang

如何解决《Node.js或Erlang》经验,为你挑选了6个好方法。

当涉及到它可以处理的并发级别时,我真的很喜欢这些工具.

Erlang看起来是更稳定的解决方案,但需要更多的学习和大量潜入功能语言范例.看起来Erlang在多核CPU方面做得更好(如果我错了就解决我的问题).

但我应该选择哪个?从短期/长期角度来看哪一个更好?

我的目标是学习一种工具,使得在高负载下扩展我的Web项目比传统语言更容易.



1> Justin Ethie..:

我会试试Erlang.即使它将是一个更陡峭的学习曲线,你将获得更多,因为你将学习一种函数式编程语言.此外,由于Erlang专门用于创建可靠,高度并发的系统,因此您将学习很多有关同时创建高度可伸缩服务的知识.


我不认为Erlang比Javascript复杂一点.在Erlang中没有任何类型的继承,因此您始终确定您调用的函数.Erlang中没有隐式类型转换,因此您始终可以确定使用的数据类型.没有破坏性的赋值,所以你总是确定你不会破坏旧代码,因为回调中的一些新代码改变了你的内部状态.

2> Jarsen..:

我不能代表Erlang,但有一些关于节点没有提及的事情:

Node使用Google的V8引擎实际将javascript编译成机器代码.所以节点实际上非常快.所以这是事件驱动编程和非阻塞io提供的速度优势之上.

Node有一个非常活跃的社区.在freenode上跳到他们的IRC小组,你会明白我的意思

我注意到上面的注释推动了Erlang,因为它对学习函数式编程语言很有用.虽然我同意扩展你的技能并获得其中一项很重要,但你不应该把项目建立在你想要学习新编程风格的事实上.

另一方面,Javascript已经处于一种你觉得写得舒服的范例中!加上它的javascript,所以当你编写客户端代码时,它会看起来和感觉一致.

node的社区已经抽出了大量的模块!有redis,mongodb,沙发的模块,以及你有什么.另一个值得关注的好模块是Express(想想节点的Sinatra)

在实际编写节点的人Ryan Dahl 看看yahoo博客上的视频.我认为这将有助于您更好地了解节点所处的位置以及它的发展方向.

请记住,节点仍处于后期开发阶段,因此一直在进行相当多的更改 - 这些更改已经破坏了早期的代码.但是,据说它可以指望API不会改变太多.所以,如果你正在寻找有趣的东西,我会说节点是一个很好的选择.


我认为V8引擎将JavaScript编译为机器代码而不是汇编.
围绕Javascript完成了大量工作并没有使语言更适合解决复杂问题.对于类型转换中的所有特殊情况,语言本身都很糟糕.回调风格,其中变量在数百个不同的地方被改变,而地狱寻找发生某些任务的地方.

3> dsmith..:

我是一个长期的Erlang程序员,这个问题促使我看看node.js. 它看起来非常好.

看来您需要生成多个进程才能利用多个核心.我无法看到有关设置处理器关联性的任何信息.你可以在linux上使用taskset,但它可能应该在程序中进行参数化和设置.

我还注意到平台支持可能稍微弱一些.具体来说,看起来您需要在Cygwin下运行以获得Windows支持.

看起来不错.


编辑

Node.js现在支持Windows.


这个答案有点老了.现在Node是跨平台的,不需要Cygwin for windows.Node支持在一台机器上进行群集,共享TCP套接字.

4> Warren Young..:

我正在为多个项目寻找相同的两种替代方案.

到目前为止,我提出的最好的剃须刀是否需要使用Javascript来决定他们之间的特定项目.我想要迁移的一个现有系统已经用Javascript编写,因此它的下一个版本很可能在node.js中完成.其他项目将在一些Erlang Web框架中完成,因为没有现有的代码库可供迁移.

另一个考虑因素是Erlang可以扩展到多个核心,它可以扩展到整个数据中心.我没有在node.js中看到一个内置机制,它允许我向另一个JS进程发送一条消息而不关心它所在的机器,但是它是在最低级别的Erlang中构建的.如果你的问题不够大,不需要多台机器,或者它不需要多个协作进程,那么这个优势就不大了,所以你应该忽略它.

Erlang确实是一个深入潜水的游泳池.我建议您在开始构建Web应用程序之前先编写一个独立的功能程序.更简单的第一步,因为您似乎对Javascript感到满意,就是尝试以更实用的方式编写JS.如果您使用jQuery或Prototype,那么您已经开始使用这条路径了.尝试在Erlang中的纯函数式编程或其中一个(Haskell,F#,Scala ...)和函数JS之间进行反弹.

一旦您对函数式编程感到满意,请找出许多Erlang Web框架之一; 你可能不应该把你的应用程序直接写入低级别的东西,就像inets在这个晚期阶段.例如,看看像氮这样的东西.



5> 小智..:

虽然我个人会选择Erlang,但我承认我对JavaScript有点偏见.我的建议是你评估几点:

    您是否正在重复使用这些语言中的现有代码(无论是源代码还是程序员经验!)

    您是否需要/想要在不停止应用程序的情况下进行即时更新(这是Erlang默认获胜的地方 - 它的运行时是针对该情况设计的,而OTP包含所有必需的工具)

    在单独的并发操作而不是带宽方面,预期流量有多大?

    您为每个请求执行的操作的"并行"程度如何?

Erlang具有非常精细的并发性和网络透明的并行分布式系统.根据项目的确切内容,这种系统的成熟实施的可用性可能超过学习新语言的任何问题.还有另外两种语言适用于你可以使用的Erlang VM,类似Ruby/Python的Reia和Lisp-Flavored Erlang.

另一个选择是使用两者,特别是将Erlang用作"中心".我不确定Node.js是否具有外部函数接口系统,但如果有,则Erlang具有C库,用于外部进程与系统接口,就像任何其他Erlang进程一样.



6> adib..:

看来,Erlang在较低端服务器(512MB 4核2.4GHz AMD VM)中的部署性能更好。这是根据SyncPad比较其虚拟白板服务器应用程序的Erlang和Node.js实现的经验得出的。


是的,node.js似乎有一个令人讨厌的内存泄漏问题。Node相当新并且处于试验阶段,JavaScript和V8引擎都不是针对此类服务器方案设计的。另一方面,Erlang是专为自下而上设计的,并且有很多年需要完善和成熟。
该链接似乎已死,但它在WayBackMachine上http://web.archive.org/web/20120902014555/http://blog.mysyncpad.com/post/2073441622/node-js-vs-erlang-syncpads-experience
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有