【发布时间】:2010-11-08 18:40:07
【问题描述】:
嗨 我正在 Erlang 中实现一个类似 IM 服务器的应用程序。我为每个连接到服务器的客户端使用了一个代理进程,代理进程负责将消息发送到消息网关,消息网关又将消息发送到另一个代理进程。似乎 erlang 进程间消息传递是作为 tcp 连接实现的。因此,每个代理进程都会有一个到网关的连接。这是否意味着单台机器上的agent数量由于端口号的限制永远不会超过65535?
提前致谢!
【问题讨论】:
标签: erlang
嗨 我正在 Erlang 中实现一个类似 IM 服务器的应用程序。我为每个连接到服务器的客户端使用了一个代理进程,代理进程负责将消息发送到消息网关,消息网关又将消息发送到另一个代理进程。似乎 erlang 进程间消息传递是作为 tcp 连接实现的。因此,每个代理进程都会有一个到网关的连接。这是否意味着单台机器上的agent数量由于端口号的限制永远不会超过65535?
提前致谢!
【问题讨论】:
标签: erlang
Erlang 的一些限制:Efficiency Guide User's Guide / 10 Advanced:
分布式节点 已知节点 如果在 X 上存在来自 Y 的任何 pid、端口、引用或 funs(Erlang 数据类型),或者如果 X 和 Y 连接,则节点 X 必须知道远程节点 Y。一个节点同时/曾经知道的最大远程节点数受节点名称可用的最大原子数限制。所有关于远程节点的数据,除了节点名 atom 外,都被垃圾回收。
连接的节点 同时连接节点的最大数量受同时已知远程节点的最大数量、可用 (Erlang) 端口的最大数量或可用套接字的最大数量的限制。
【讨论】:
Erlang 通过网络连接 Erlang 节点,而不是 Erlang 进程。 (并且每个 Erlang 节点都是一个操作系统进程)。
所以当你在一台机器上有几十个Ks的Erlang节点时你会用完TCP连接(这是不合理的),而不是当你在一个单一的Erlang节点上有几十个Ks的Erlang进程时。
(我没有给出任何绝对数字,因为每个 Erlang 节点还需要与 epmd 通信,这会产生另一个网络连接。但无论如何,你可能不会在一台机器上拥有 30+K 个 Erlang 节点,也就是 OS 进程。)
【讨论】: