同机Erlang通信
我需要以下问题的答案,以帮助理解我应该采取什么方法与 Erlang 交互。 AFAIK SMP UNIX 机器上的 Erlang 使用多进程方法。在这种情况下,它应该执行同一台机器 IPC。
- Erlang 是否使用 UNIX 的 UNIX 域套接字?
它在 Windows 上使用命名管道吗?
如果它没有实现上述两个结构——即,没有 Windows 的命名管道;它必须回退到 Windows 上的套接字。
上述原则是如何实现的,它们是否使用面向消息、每通道单线程、异步结构还是其他什么?
如果我上面的推理不正确,它是否使用主子树并且所有其他进程通过主进程间接通信?
-- edit 1 --
链接到erlang二进制格式文档。
普遍的共识是 Unix 域套接字优于 TCP/IP。我想我会尝试扩展 Erlang 以使用提供的更好的原语。我还强烈怀疑 epol 和 windows IOPC 没有在 TCP/IP 事件循环中使用——一旦我审核了代码,我就会发回来。
另一篇SO post断言Erlang确实不支持除TCP和UDP之外的任何内容。
有两个用于通信的 Erlang 库 Erlang 节点 -> c_node
和 c_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.
- Does Erlang use UNIX domain sockets for UNIX ?
Does it use named-pipes for windows ?
If it does not implement both constructs above -- i.e., no named-pipes for windows; it must have to fallback to sockets, on windows.
How are the above mentioned principles implemented, do they use message oriented, single-thread per channel, asynchronous constructs or is it something else ?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
作为对您原来的问题和一些评论的评论:
我非常确定,事实上我知道,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.
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).