2010-11-08 22 views
1

嗨 我在Erlang中实现了一个类似IM服务器的应用程序。我为连接到服务器的每个客户端使用了一个代理进程,代理进程负责将消息发送到消息网关,消息网关又将消息发送到另一个代理进程。看来,erlang进程间消息传递是作为tcp连接实现的。所以每个代理进程都会有一个连接到网关。这是否意味着由于端口号的限制,单台机器上的代理数量不会超过65,535个?关于进程间消息传递的问题

在此先感谢!

回答

1

一些限制为二郎:Efficiency Guide User's Guide/10 Advanced

分布式节点 已知节点 远程节点Y必须是已知的,如果存在任何的PID,港口,引用或玩意儿到节点X(Erlang的数据类型)从X上的Y,或者连接了X和Y.同时/节点已知的远程节点的最大数量受可用于节点名称的最大原子数限制。所有关于远程节点的数据,除了节点名称atom,都被垃圾回收。

连接节点 同时连接的节点的最大数量受限于同时已知的远程节点的最大数量,可用的(Erlang)端口的最大数量或可用套接字的最大数量。

0

Erlang通过网络连接Erlang节点,而不是Erlang进程。 (并且每个Erlang节点都是一个操作系统进程)。

所以,你会用完的TCP连接,当你有一台机器上Erlang节点的几十堪萨斯(这是不合理的),而不是当你有Erlang进程的几十Ks的单一的Erlang节点上。

(我不会给任何绝对数字,因为每个二郎节点也将需要产生另一个网络连接EPMD进行通信。但是,你很可能将没有又名操作系统进程Erlang节点的30 + K一台机器上呢。 )

+0

Erlang节点以全网状连接,所以64K代表网络中所有连接的节点,而不是单个节点。拥有那么多节点也不合理:) – Zed 2010-11-08 10:10:02

+0

那么如果IM所需要的并且需要在超过64k的CPU内核上运行...... ;-) – 2010-11-08 10:17:37

+0

非常感谢!当流程通过不同的机器连接时,我发现这是事实。但是当它们在同一台机器上时,每个进程都通过127.0.0.1(可能是epmd?)使用tcp连接。这似乎没有太大的问题,因为环回地址很丰富:) – 2010-11-11 01:25:07