2016-07-31 49 views
0

我在学习Erlang并试图理解它的套接字是如何工作的,因为它意味着是语言和OTP中最强大的部分之一。用Erlang与其他人制作的套接字服务器

我有NodeJS的经验,并想知道如何使用NodeJS和Erlang制作的应用程序在管理多个套接字连接方面有所不同。

据我所知,虽然JavaScript是单线程的,但V8可以管理所有多个同时连接,尽管Erlang本身可以管理多个连接。

所以,我想知道,如果Erlang在一次管理多个连接方面有出色的支持,它与程序员的其他技术有什么不同?我的意思是,当我为NodeJS编写一个应用程序时,它可以拥有尽可能多的连接,并且管理良好,就像我在Erlang编写代码一样,不是吗?

请分享您的想法,也欢迎您在这方面与Erlang专业有关的文章链接。

回答

1

我绝不是Erlang的专家,但我想我知道Erlang和NodeJs在同一级别。

你说的话都是正确的。 Bot可以非常有效地处理多个连接,你管理的很好。

但问题是,这些问题不仅仅是处理多个并发连接。 Erlang试图解决的问题非常好,是失败安全和分配。我不认为NodeJs会像现在这样好。

不要误会,我并不是说没有人可以在NodeJs中编写分布式应用程序,但考虑到Erlang给你的工具,这可能是更好的选择。作为一个例子,Erlang让你链接你的进程,所以当其中一个失败时,其他的也会失败或者得到通知。这本身并不是很实用,但是当你将它看作supervisors和无共享进程时,它是一个很好的工具。

对于分布,Erlang让我们将节点链接在一起。链接节点可以一起谈话,就好像它们在同一台机器上一样,并且它们也可以在另一边产生进程。考虑到这一点,可以从另一个健康的节点上的故障节点启动失败的应用程序。给你一个很好的正常运行时间。

更不用说这些工具有多年的经验。

试着解决另一个生态系统的这些问题。我说生态系统,因为Erlang作为一种语言是不完整的,但工具和框架(主要是OTP)也必须考虑。那么你也可以说Erlang真的在这方面发光。

但是Erlang在线性处理,数字运算,图像/声音处理等方面也不是很好。这在另一个系统中可以更好地实现。

我想,在这方面,NodeJs和Erlang之间的最大区别就是它们的运行时模型。 NodeJs有一个进程,一个在io相关任务上工作的异步线程。当然,你可以运行多个进程,但这是最基本的。另一方面,Erlang有一个名为BEAM的虚拟机。 Erlang在这个虚拟机内部使用特殊的进程,非常轻的进程。 BEAM自己调度它们,因为它们不是OS进程。这为BEAM提供了同时拥有数十万个进程的优势,每个进程都可以完成一项任务,无论是其他任何任务。

我认为你现在看到了区别。 Erlang更加经过战斗考验,当失败的安全或分销是必须的时候更好。当你需要更快的开发和部署时,NodeJs可能会更好。