我已经阅读了Erlang文档,特别是有关Erlang Ports和Erlang Nodes的主题.
本教程使用相同的示例来说明这两个概念,即服务于两个简单函数的程序,但尽管存在一些通信协议差异,但它并未阐明使用这两个概念的优缺点.
乍一看,似乎端口更容易在外部语言中设置服务器,但我想知道Erlang端口可以提供哪些Erlang端口不能,反之亦然.
任何人都可以澄清Erlang Ports vs Nodes的功能和非功能方面吗?
谢谢
澄清更新
我真正想要比较的是用非ErlangVM语言编写的Erlang Ports vs Node(我知道Erlang节点是完整的Erlang VM,因此比Ports强大得多).例如,C端口可以做什么C节点不能,反之亦然?
CNode或Port没有或不能做什么.我想您错过了解为什么每个选项都已构建,然后它可以帮助您决定选择哪个.
构建CNode是为了帮助跨群集分发任务.群集是您想要此选项的原因.
如果现有的Linux设备,命令行工具或脚本可用于完成任务,则构建端口以替换NIF.你仍然可以构建erlang集群,因为你的erlang应用程序毕竟会调用端口:)所以你不受此选项的限制.
现在假设你拥有庞大的C/C++,比如postgres数据库,你想让它成为你的集群的一部分(愚蠢的例子,但请耐心等待).您可以分叉源代码,向其添加CNODE代码并将RPC消息转换为查询,而事件更多,您可以使用postgres内部API,而您只能使用SQL查询.所以端口在这种情况下不会有用,因为它是一些外部服务运行但是...你可以在pstgresql中构建一些扩展,然后将它作为一些函数公开给SQL,最后进行标准的SQL查询以便执行这样的功能来自erlang节点.
正如我所说的,每个人都有自己的位置,这取决于你的情况以及你现有的解决方案和现有的解决方案.