Node.js & Erlang

  没有应用场景上下文做编程语言的比较就是一场关公战秦琼的乱斗而已,而语言的比较一次又一次的比较,并非开发者无聊,而是这的确关乎开发者时间精力的投入和未来可能的回报.现在估计问的最多的就是做Android开发还是iOS开发,仅次于它的就是选Node.js还是Erlang?众说纷纭,自己看吧,甚至Joe Armstrong等牛人也也加入了讨论!
     
     阅读下面的文章有两点提示1.文章下面的评论,很多评论比文章精彩.2.注意文章发表的时间,有些观点是具有时效性的
 

博客文章

互联网从来不缺观点,缺少的是数据和事实,下面按照干货的多少推荐几篇文章:

A comparison between Misultin, Mochiweb, Cowboy, NodeJS and Tornadoweb

http://www.ostinelli.net/a-comparison-between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/

发表时间May 2011
恰如其名,这篇文章比较了 Misultin, Mochiweb, Cowboy, NodeJS and Tornadoweb,看比较图吧,评论也精彩:

socket.io-erlang-vs-nodejs
基于socket.io项目做的erlang与node.js的比较
In the webpage that will be displayed when you go to http://localhost:3000, you can set a number of messages to be sent to the server via socket.io.
In my computer nodejs processes 10k messages in 1250ms, and erlang version does the same in 1050ms.
With 100k messages, erlang handles them in 70secs, and node drops the connection thus failing the test.

We know that benchmarks aren't really that useful, since they differ from real production code. But this one served me to decide to go with erlang instead of node for a game I will be developing. Not being able to handle 100k messages is a no-no, given that erlang is able to handle them without problem.
 
Node.js vs Erlang: SyncPad’s Experience
原文在墙外:http://blog.mysyncpad.com/post/2073441622/node-js-vs-erlang-syncpads-experience
2010年2月2日的文章,SyncPad’s 的开发者比较Node.js和Erlang的方案.应该说作者在Node.js上是遇到不少问题的;CPU飙高,内存泄漏,在node.js还是下了很多功夫的甚至尝试了multi-node:

Node.js v. Erlang
January 25, 2012的文章
原文在墙外: http://ksdlck.com/post/16493417514/node-js-v-erlang 
从实现机制上做了一个比较,对两种技术的关键点做了高度的概括,节录文章开头和结尾:
Node and Erlang both set out to solve an issue that developers of a particular class of systems routinely face: dealing with massive concurrency.
 
In the end, Node and Erlang find their way to almost the same place. They are both dynamic languages, with similar native datastructures, and one can see that Node’s ubiquitous EventEmitter is, in many ways, isomorphic to Erlang’s message passing scheme. Libraries like hook.ioprovide some semblance of the agnosticism with which one treats the location of an adressee in Erlang. Hotplugging of code is possible with no particular hassle, but—arguably as it should be—the responsibility of the programmer to do in such a way as to not break the application. They both are ideall suited to workloads that are primarily bottlenecked on IO, and both excel at shifting data from one place to another.
 
Node.js vs Erlang is the wrong battle.
原文在墙外:http://jlouisramblings.blogspot.com/2011/05/nodejs-vs-erlang-is-wrong-battle.html
原文在墙外:http://jlouisramblings.blogspot.com/2010/12/differences-between-nodejs-and-erlang_14.html
作者第二篇文章要实际一些,conclusion写得很搞:
My main goal was to set out and exemplify a major difference in how a system like Node.js handles requests compared to Erlang. I think I have succeeded. It underpins the idea that you need to solve problems depending on platform. In Node.js, you will need to break up long-running jobs manually to give others a chance at the CPU (this is essentially cooperative multitasking). In Erlang, this is not a problem — and a single bad process can’t hose the system as a whole. On the other hand, I am sure there are problems for which Node.js shines and it will have to be worked around in Erlang.

Erlang vs node.js
Posted by David N. Welton on Thursday, April 29, 2010
http://journal.dedasys.com/2010/04/29/erlang-vs-node-js

"Good enough" concurrency, combined with a language that is at least an order of magnitude more popular than Erlang, and a fast runtime, combined with ease of use in general (it's way easier to get started with node.js than with most Erlang web stuff) make for a system that's likely to do fairly well in terms of diffusion and popularity, and is going to "eat some of Erlang's lunch". Or perhaps, rather than actually taking users away from Erlang, it's likely to attract people that might have otherwise gone to Erlang.


Felix's Node.js Convincing the boss guide
http://nodeguide.com/convincing_the_boss.html 

Felix Geisendörfer, an early node.js core contributor and co-founder of transloadit.com.

But please be careful here, since JavaScript is a dynamic / garbage collected language, your response times may sometimes vary depending on how often and long the garbage collection kicks in (at which point your program is stopped). So don't try to build hard realtime systems in node, that require consistent response times. Erlang is probably a better choice for these kinds of applications.

问答站

这种问题肯定会在技术问答站落户,从争论中找到学习的路径,分析的方法,收获不止这一个问题那么简单了:
StackOverflow上的这篇:
Node.js or Erlang
Node.Js in Erlang style?


StackExchange站点围观地址:
Learning Erlang vs learning node.js
这里的讨论包含了很多学习的指导,其中提到了这篇妙趣横生的 An Open Letter to the Erlang Beginner (or Onlooker) http://ferd.ca/an-open-letter-to-the-erlang-beginner-or-onlooker.html

Google Group围观地址:node.js compared to erlang  
在这个讨论中,惊现神人:Erlang之父Joe Armstrong 以及Nabble – Erlang 的作者Max Lapshin等等 
 
Share|
 

Erlang

FROM SHARP TO ERLANG 
[Erlang 0039] Erlang Inheritance
摘要: 和Parameterized Module一样的态度:把extend当作Erlang语言特性,当作代码复用的一种手段,不扯OOP,可能更好理解: ) 本文回答Erlang Inheritance 怎么用?如果是Parameterized Module呢? 什么时候使用?阅读全文
POSTED @ 2012-02-17 13:15 坚强2002 阅读(412) | 评论 (0) 编辑
[Erlang 0038] Node.js & Erlang
摘要: 没有应用场景上下文做编程语言的比较就是一场关公战秦琼的乱斗而已,而语言的比较一次又一次的比较,并非开发者无聊,而是这的确关乎开发者时间精力的投入和未来可能的回报.现在估计问的最多的就是做Android开发还是iOS开发,仅次于它的就是选Node.js还是Erlang?众说纷纭,自己看吧,甚至Joe Armstrong,Felix Geisendörfer,等牛人也也加入了讨论!阅读全文
POSTED @ 2012-02-16 22:01 坚强2002 阅读(707) | 评论 (0) 编辑
[Erlang 0037] Erlang Parameterized Module
摘要: 把Parameterized Module作为一个Erlang的语法特性而不扯到OOP上去,可能更好理解: ) 本文回答Erlang Parameterized Module是什么?有什么用?怎么实现的?我们能不能用?什么时候使用?阅读全文
POSTED @ 2012-02-16 16:31 坚强2002 阅读(698) | 评论 (1) 编辑
[Erlang 0036] "HOW TO"不创建崩溃报告主动销毁gen_server进程
摘要: 创建一个gen_server的时候会在init方法中检查依赖的外部服务是否可用;如果不可用的话他就直接返回{stop,Reason},gen_server进程创建失败;这个目标他很容易就达到了,但是进程启动失败之后却创建了Crash Report,这种异常情况是可以预料的并不需要创建崩溃报告Crash Report;为什么会产生崩溃报告Crash Report?如何消除呢?阅读全文
POSTED @ 2012-02-16 11:32 坚强2002 阅读(736) | 评论 (0) 编辑
[Erlang 0035] Erlang SMP
摘要: Erlang SMP使用操作系统线程实现多个调度器,利用了多核多CPU的优势并把实现细节对开发者隐藏起来, 可以不修改代码甚至不用重新编译就可以使用;使用SMP可以有非常灵活的启动选择和运行时调整的方法入口;阅读全文
POSTED @ 2012-02-01 12:36 坚强2002 阅读(118) | 评论 (0) 编辑
[Erlang 0034] Erlang iolist
摘要: 既然Erlang中有List,那iolist又是为了解决什么问题而设计的呢?阅读全文
POSTED @ 2012-01-31 17:58 坚强2002 阅读(990) | 评论 (0) 编辑
[Erlang 0033] 接入Erlang控制台的几种方法
摘要: Erlang服务部署在生产环境也需要一些方式进入到Erlang控制台来做一些工作,"就像魔术师的飞刀,出手但并没有脱手".阅读全文
POSTED @ 2012-01-18 15:03 坚强2002 阅读(776) | 评论 (1) 编辑
[Erlang 0032] Erlang Binary的内部实现
摘要: The binary object can be referenced by any number of ProcBins from any number of processes; the object contains a reference counter to keep track of the number of references, so that it can be removed when the last reference disappears.阅读全文
POSTED @ 2012-01-12 00:13 坚强2002 阅读(139) | 评论 (0) 编辑
[Erlang 0031] Erlang Shell中的输出完整数据
摘要: 标准的解决方案是使用shell中的rp方法格式化输出结果 比如 rp(os:getenv()).阅读全文
POSTED @ 2012-01-10 22:28 坚强2002 阅读(99) | 评论 (0) 编辑
[Erlang 0030] 理解Erlang/OTP Supervisor
摘要: Supervisor的基本思想就是通过建立层级结构实现错误隔离和管理,具体方法是通过重启的方式保持子进程一直活着.阅读全文
POSTED @ 2012-01-10 14:17 坚强2002 阅读(878) | 评论 (0) 编辑
[Erlang 0029] Erlang Inline编译
摘要: Erlang的编译器可以将Erlang模块中的函数进行内联编译,内联(inlining)的含义是把一个方法的调用替换成函数体并把参数替换成实际值.阅读全文
POSTED @ 2012-01-09 13:40 坚强2002 阅读(987) | 评论 (0) 编辑
[Erlang 0028] Erlang atom
摘要: Erlang中atom数据类型能够做的唯一的运算就是比较,它不参与垃圾回收,因而在搞崩Erlang的各种方法中无节制使用原子名列前茅.阅读全文
POSTED @ 2012-01-04 15:57 坚强2002 阅读(939) | 评论 (0) 编辑
[Erlang 0027] Using Record in Erlang Shell
摘要: 《[Erlang 0006] Erlang中的record与宏》一文中我们提到过Record是一个编译时的功能,在Erlang VM中并没有专门的数据类型.如何在Erlang Shell中使用Record呢?本文给出了五种方法.阅读全文
POSTED @ 2011-12-31 13:34 坚强2002 阅读(923) | 评论 (1) 编辑
[Erlang 0026] 目前最优的Erlang IDE - erlIDE
摘要: 作为少数几个还在持续改进的Erlang IDE插件,erlide现在的版本已经堪称是目前最好用的Erlang IDE.阅读全文
POSTED @ 2011-12-28 17:19 坚强2002 阅读(330) | 评论 (2) 编辑
[Erlang 0025]理解Erlang/OTP - Application
摘要: log4erl是Erlang的日志项目,我们可以通过阅读log4erl源代码来了解Erlang/OTP,我们先从log4erl应用程序启动开始说起......阅读全文
POSTED @ 2011-12-27 21:30 坚强2002 阅读(809) | 评论 (0) 编辑
[Erlang 0024]Erlang二进制数据处理
摘要: 在Erlang中写处理二进制数据的代码是洋溢着幸福感的,它对于二进制数据强大的表现力甚至能让你忘掉了它种种不便,今天我们说说Erlang的二进制数据处理。阅读全文
POSTED @ 2011-12-25 23:12 坚强2002 阅读(1015) | 评论 (3) 编辑
[Erlang 0023] 理解Erlang/OTP gen_server
摘要: Erlang/OTP behaviour是对一些通用编程模式的抽象,在用Erlang 语言做开发时可以在behavior基础上快速构建出可用且可靠的功能.OTP behaviour包含gen_server gen_event gen_fsm supervisor.其中绝大多数情况下都是在使用gen_server,supervisor本身也是使用gen_server实现的.我们就以gen_server做为起点,逐步学习Erlang/ OTP.阅读全文
POSTED @ 2011-12-20 23:19 坚强2002 阅读(852) | 评论 (1) 编辑
[Erlang 0022] It solves the right problems in the right way at the right time
摘要: "很少有像Erlang这样神奇的语言,作为一种面向并发的语言它把困难的事情变得如此容易,把容易的事情变得如此困难."《Seven Languages in Seven Weeks》的作者这样描述对Erlang的印象;《Seven Languages in Seven Weeks》这本小册子浮光掠影地介绍了7种语言,其中介绍Erlang的章节中,比较有料的是Joe Armstrong的访谈,和另外一篇访谈一起摘录于此,在这些访谈里面,我们不仅仅能读到技术阅读全文
POSTED @ 2011-12-17 12:04 坚强2002 阅读(94) | 评论 (0) 编辑
[Erlang 0021] From String To Erlang Code
摘要: 在Erlang里面动态解释字符串并执行,实现类似Python.CreateEngine().Execute("12*(1+2)");的功能.阅读全文
POSTED @ 2011-12-15 14:10 坚强2002 阅读(887) | 评论 (1) 编辑
[Erlang 0020]网页游戏分线到不分线
摘要: 这一年来可以明显看到一个变化:网页游戏分线从标配逐渐变成了可选,越来越多的游戏开始不分线;当初为什么要分线?现在为什么又不分线?技术上面临着什么挑战?仅仅是技术问题么?阅读全文
POSTED @ 2011-12-10 08:37 坚强2002 阅读(1170) | 评论 (0) 编辑
[Erlang 0019]Redis协议解读与实现(.Net & Erlang)
摘要: 本文简单解读了Redis的协议规范,并介绍了.net版本和Erlang版本Redis客户端的开源项目,分别是booksleeve和erl-redis.阅读全文
POSTED @ 2011-12-06 22:04 坚强2002 阅读(999) | 评论 (0) 编辑
[Erlang 0018]Erlang为何对List情有独钟?
摘要: Erlang编程实践中绝大多数时候是在和List打交道:取头元素,遍历,匹配...为什么Erlang和其它函数式编程的语言都对对List情有独钟呢?《Erlang and OTP in Action》一书的附录B中提到了这个问题,其背后的思想就是引用透明(Referential transparency).阅读全文
POSTED @ 2011-12-04 20:33 坚强2002 阅读(220) | 评论 (2) 编辑
[Erlang 0017]Erlang/OTP基础模块 proc_lib
摘要: 在梳理Erlang/OTP相关的内容时,我发现无论如何都无法避开proc_lib模块,说它是OTP的基础模块一点不为过.阅读全文
POSTED @ 2011-11-22 23:07 坚强2002 阅读(814) | 评论 (0) 编辑
[Erlang 0016]Erlang三则之 HIPE SASL Monitor
摘要: Erlang 使用HIPE SASL Monitor常用的一些参数和命令,记录于此备忘.阅读全文
POSTED @ 2011-11-20 22:30 坚强2002 阅读(169) | 评论 (0) 编辑
[Erlang 0015]Erlang OTP设计原则
摘要: OTP设计原则是如何按照进程,模块,文件夹的概念来组织代码的一系列原则.阅读全文
POSTED @ 2011-11-20 22:23 坚强2002 阅读(1081) | 评论 (0) 编辑
[Erlang 0014]Erlang垃圾回收机制
摘要: Erlang用VM做到了软实时,那它的垃圾回收的机制是怎样的呢?性能优化往往是从了解语言的垃圾回收机制开始的,Erlang也不例外,了解了垃圾回收机制,我们又可以做些什么呢?阅读全文
POSTED @ 2011-11-13 05:22 坚强2002 阅读(1048) | 评论 (0) 编辑
[Erlang 0013]抓取Erlang进程运行时信息
摘要: [Erlang 0012]Erlang Process input queue 一文我们提到使用erlang:process_info/1抓取进程运行时状态信息,有时我们需要把节点内所有的进程的信息都抓取下来,便于分析整个节点内进程的运行状态,特别是挑出一些异常的进程:比如有些进程的reduction值和其它进程相比大出好几个数量级,那这个进程需要好好检查一下了。阅读全文
POSTED @ 2011-11-06 10:48 坚强2002 阅读(989) | 评论 (0) 编辑
[Erlang 0012]Erlang Process input queue
摘要: Erlang进程有自己的消息队列来保存接收到的消息,新接收到的消息放在队列的尾部。Erlang的接收原语receive就是用来从消息队列中选择性提取消息的。我们通过几个demo来了解这一过程阅读全文
POSTED @ 2011-11-05 22:34 坚强2002 阅读(1077) | 评论 (3) 编辑
[Erlang 0011] Erlang 杂记Ⅱ
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天又整理出来了一部分,分享一下. 上一次的地址:[Erlang 0009] Erlang 杂记阅读全文
POSTED @ 2011-10-30 18:18 坚强2002 阅读(1169) | 评论 (0) 编辑
[Erlang 0010] Erlang 热更新
摘要: Erlang脱胎于电信业,Joe Armstrong在描述Erlang的设计要求时其中就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停服务的热更新获益良多,终于不再用等到半夜没有人的时候再做更新了.那么如何进行热更新?Erlang又是如何做到热更新的呢?这就是我们本文要回答的问题.阅读全文
POSTED @ 2011-10-29 19:11 坚强2002 阅读(1386) | 评论 (2) 编辑
[Erlang 0009] Erlang 杂记
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分,分享一下.阅读全文
POSTED @ 2011-10-23 17:02 坚强2002 阅读(1114) | 评论 (3) 编辑
[Erlang 0008] Erlang的Match specifications
摘要: 在Erlang的ETS中进行比较复杂的查询,Match Specification是一个利器;match_spec的文档是ERTS中独立的章节,容易被忽略,使用中也容易出现迷惑,比如今天要说的这个ets:select_count阅读全文
POSTED @ 2011-10-22 21:33 坚强2002 阅读(901) | 评论 (1) 编辑
[Erlang 0007] Erlang ETS Table 二三事
摘要: 不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table.阅读全文
POSTED @ 2011-08-11 12:15 坚强2002 阅读(1548) | 评论 (1) 编辑
[Erlang 0006] Erlang中的record与宏
摘要: 很难想象如果没有宏,没有record,我们的Erlang代码要多么的难读,难以扩展,到处都是Magic Number;嗯哼,总还是有一扇窗是打开的阅读全文
POSTED @ 2011-07-20 21:42 坚强2002 阅读(1256) | 评论 (3) 编辑
[Erlang 0005] net_kernel:monitor_nodes 订阅node连接\断开消息
摘要: Erlang中节点之间建立链接我们可以使用net_adm:ping(),连接成功返回pong,失败返回pang;实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一 些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息;Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag);调用这个方法来订阅节点状态变 动的消息.一个节点加入的时候会向所有的订阅进程发送一个nodeup消息,一个节点断开的时候会发送nodedown消息.阅读全文
POSTED @ 2011-07-12 21:52 坚强2002 阅读(1314) | 评论 (0) 编辑
[Erlang 0004] Centos 源代码编译 安装 Erlang
摘要: 我需要在Centos中安装Erlang B13R04 ,第一次做这件事情破费周折,主要是对Erlang依赖的库不熟悉,总是编译不过;这里梳理一下安装过程中的细节阅读全文
POSTED @ 2011-07-09 05:43 坚强2002 阅读(1555) | 评论 (1) 编辑
[回头再说] 国内网页游戏背景音乐
摘要: 首先,一大批网页游戏用的是中国武侠背景,大量的电视武侠电影为此提供了丰富的素材阅读全文
POSTED @ 2011-07-06 22:21 坚强2002 阅读(775) | 评论 (0) 编辑
[Erlang 0003] 编译Erlang程序
摘要: 如果语言学习也做一个"流失率统计",那么有多少人是在编译环节放弃的呢?按下F6就完成编译,F5就可以运行,这样的好日子不再了,你能接受么? 我们今天要说的就是Erlang的编译.阅读全文
POSTED @ 2011-07-05 01:01 坚强2002 阅读(1710) | 评论 (1) 编辑
[Erlang 0002] Erlang IDE
摘要: 当我和我的团队决定技术转型到Erlang的时候,一连串的问题就冒出来了:就是Erlang用什么IDE啊?Erlang怎么编译啊?Erlang编写的程序怎么运行啊? Erlang编写的程序怎么调试啊?其实这些问题具有普适性,在学习一门新语言的时候,我们往往首先提出的就是这几个问题.我个人认为程序员的基本技能 包括:代码编写,代码重构,调试,性能优化;而这四项基本技能都或多或少的需要对应工具的支持.工欲善其事必先利其器,工具,如江湖人的刀剑,必须首先解决阅读全文
POSTED @ 2011-07-03 16:56 坚强2002 阅读(3592) | 评论 (12) 编辑
[Erlang 0001] 我们为什么选择Erlang
摘要: 一款多人在线游戏,一个玩家走一步都要把消息广播给同屏的玩家,玩家聊天,战斗更涉及到大量的消息广播;如何应对?再有一个及其普通 却不太容易搞定的的需求:在线玩家列表怎么实现?是啊,你是不是在想用哪种锁合适?提到的两个场景的关键词是:高并发,大量广播;可能 你还会想到"锁".阅读全文
POSTED @ 2011-07-03 15:48 坚强2002 阅读(2318) | 评论 (19) 编辑
原文地址:https://www.cnblogs.com/Leo_wl/p/2355973.html