使用 Erlang 制作的套接字服务器与其他服务器

Sockets server made with Erlang vs others

我正在学习 Erlang 并试图了解它的套接字是如何工作的,因为它注定是该语言和 OTP 中最强大的部分之一。

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

据我了解,虽然 JavaScript 是单线程的,但 V8 为它管理所有多个同时连接,尽管 Erlang 可以自己管理多个连接。

所以,我想知道,如果 Erlang 对一次管理多个连接有出色的支持,对于程序员来说它与其他技术有何不同?我的意思是,当我为 NodeJS 编写应用程序时,它可以打开和管理良好的连接,就像我在 Erlang 中编写代码一样,不是吗?

请分享您的想法,也欢迎链接到一些关于 Erlang 在这方面的特性的文章。

我绝不是 Erlang 专家,但我认为我对 Erlang 和 NodeJs 的了解处于同一水平。

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

但问题是,问题不仅仅在于处理多个并发连接。 Erlang 试图很好地解决的问题是故障安全和分发。我认为 NodeJs 不会像现在这样擅长它。

别误会,我并不是说没有人可以用 NodeJs 编写分布式应用程序,但考虑到 Erlang 为您提供的工具,它可能是更好的选择。

为了故障安全,例如,Erlang 让您 link 您的流程,因此当一个失败时,其他也会失败或得到通知。这本身并不是很实用,但是当您将其与 supervisors 和无共享进程一起查看时,它是一个很棒的工具。

对于分发,Erlang 让您 link 节点在一起。链接的节点可以像在同一台机器上一样一起交谈,它们也可以在另一端产生进程。考虑一下,能够从另一个健康节点上的故障节点启动故障应用程序。给你一个很好的正常运行时间。

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

尝试在另一个生态系统上解决这些问题。我说生态系统,因为 Erlang 作为一种语言并不完整,但也必须考虑工具和框架(主要是 OTP)。那你也可以说Erlang在这方面确实大放异彩。

但是Erlang在线性处理,数字c运行ching,image/sound处理等方面也不是很好。那最好在另一个系统中实现。

我认为,在这方面,NodeJs 和 Erlang 的最大区别在于它们的 运行 时间模型。 NodeJs 有一个进程,一个异步处理 io 相关任务的线程。当然,您可以 运行 多个进程,但这是最基本的事情。另一方面,Erlang 有一个名为 BEAM 的虚拟机。 Erlang 在这个 VM 中使用了特殊的进程,非常轻的进程。 BEAM 自行安排它们,因为它们不是 OS 进程。这使 BEAM 具有同时拥有数十万个进程的优势,每个进程执行一个任务,无论是 io 还是其他任何任务。

我想你现在看到了区别。 Erlang 经过了更多的实战检验,在故障安全或分发是必须的情况下表现得更好。当您需要更快的开发和部署时,NodeJs 可能会更好。