同机Erlang通信

发布于 2024-08-14 05:58:52 字数 1320 浏览 4 评论 0原文

我需要以下问题的答案,以帮助理解我应该采取什么方法与 Erlang 交互。 AFAIK SMP UNIX 机器上的 Erlang 使用多进程方法。在这种情况下,它应该执行同一台机器 IPC。

  1. Erlang 是否使用 UNIX 的 UNIX 域套接字?
  2. 它在 Windows 上使用命名管道吗?

  3. 如果它没有实现上述两个结构——即,没有 Windows 的命名管道;它必须回退到 Windows 上的套接字。

  4. 上述原则是如何实现的,它们是否使用面向消息、每通道单线程、异步结构还是其他什么?

  5. 如果我上面的推理不正确,它是否使用主子树并且所有其他进程通过主进程间接通信?

-- edit 1 --

链接到erlang二进制格式文档。

普遍的共识是 Unix 域套接字优于 TCP/IP。我想我会尝试扩展 Erlang 以使用提供的更好的原语。我还强烈怀疑 epol 和 windows IOPC 没有在 TCP/IP 事件循环中使用——一旦我审核了代码,我就会发回来。

另一篇SO post断言Erlang确实不支持除TCP和UDP之外的任何内容。

有两个用于通信的 Erlang 库 Erlang 节点 -> c_nodec_node -> Erlang_node

Erlang socket 模块 允许在 UNIX 下打开 Unix Dom Sockets。

I need an answer to the following question to help understand what approach I should be taking to interface with Erlang. AFAIK Erlang on a SMP UNIX box uses the multi-process approach. In this case it should do same machine IPC.

  1. Does Erlang use UNIX domain sockets for UNIX ?
  2. Does it use named-pipes for windows ?

  3. If it does not implement both constructs above -- i.e., no named-pipes for windows; it must have to fallback to sockets, on windows.

  4. How are the above mentioned principles implemented, do they use message oriented, single-thread per channel, asynchronous constructs or is it something else ?

  5. If my line of reasoning above is incorrect, does it use a master-child tree and all other processes communicate -- indirectly -- through the master ?

-- edit 1 --

Link to the erlang binary format documentation.

The universal concensus is that Unix Domain Sockets outperform TCP/IP. I think I will try to extend Erlang to use the better primitives provided. I also strongly suspect that epol and windows IOPC is not used in the TCP/IP event loop -- I will post back once I have audited the code.

Another SO post that asserts that Erlang indeed, does not support anything other than TCP and UDP.

There are two Erlang libraries for communication Erlang node -> c_node and c_node -> Erlang_node

The Erlang module for sockets allows Unix Dom Sockets to be opened under UNIX.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吖咩 2024-08-21 05:58:52

作为对您原来的问题和一些评论的评论:

  • 非常确定,事实上我知道,Erlang VM 在节点内部执行此操作不使用套接字或管道在(Erlang)进程之间进行通信。这将是荒谬的,并且完全违背了轻量级进程间通信的基本 Erlang 原则。

  • Erlang 节点之间的 Erlang VM 使用 TCP/IP。从 Erlang 中看到的语义和行为与节点内通信相同,在大多数方面,所涉及的进程位于哪些节点上是完全透明的。

  • 无论使用多少个核心和调度程序,也无论每个核心运行多少个调度程序,SMP 都不会改变这些基础知识。

    SMP 不会改变这些基础知识

As a comment to your original question and to some of the comments:

  • I am VERY sure, in fact I KNOW, that internally within a node the Erlang VM does not use sockets or pipes for communication between (Erlang) processes. That would be ludicrous and completely go against the basic Erlang principles of light-weight inter- (Erlang) process communication.

  • Between Erlang nodes the Erlang VM uses TCP/IP. The semantics and behaviour as seen from Erlang are the same as for intra-node communication, in most respects it is completely transparent on which nodes the processes involved lie.

  • SMPs don't change these basics, irrespective of how many cores and schedulers are used, and irrespective of how many schedulers are run per core.

温馨耳语 2024-08-21 05:58:52

R1。它使用 TCP/IP(事实上,没有任何对 UNIX 域套接字的“标准”支持)

R2。我很确定它仍然是 TCP/IP 套接字

R3。参见 R2

R4。 Erlang 有一种适合的二进制交换格式,并且它是基于消息的。交换可以是同步的(类似 RPC)或异步的。

R5。无师父。


作为奖励(帮助您节省时间):不要忘记使用注册名称(-sname 或 -name)以便使用节点间通信(RPC 或其他)。

R1. It uses TCP/IP (in fact, there isn't any "standard" support for UNIX domain sockets)

R2. I am pretty sure it is still TCP/IP sockets

R3. see R2

R4. There is a binary exchange format proper to Erlang and it is message based. Exchanges can either be sync (RPC-like) or async.

R5. No master.


As bonus (to help you save time): don't forget to use a registered name (-sname or -name) in order to use inter-node communications (either RPC or whatever).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文