您好 我正在Erlang中实现类似IM服务器的应用程序。我为连接到服务器的每个客户端使用了一个代理进程,代理进程负责将消息发送到消息网关,消息网关又将消息发送到另一个代理进程。似乎erlang进程间消息传递是作为tcp连接实现的。因此,每个代理进程都会有一个连接到网关。这是否意味着由于端口号的限制,单台机器上的代理数量永远不会超过65,535?
提前致谢!
答案 0 :(得分:1)
Erlang的一些限制:Efficiency Guide User's Guide / 10 Advanced:
分布式节点 已知节点 如果X上的Y上存在任何pids,端口,引用或函数(Erlang数据类型),或者如果连接了X和Y,则必须知道节点X的远程节点Y.节点同时/已知的最大远程节点数受限于节点名可用的最大原子数。除了节点名称atom之外,所有与远程节点有关的数据都是垃圾收集的。
已连接的节点 同时连接的节点的最大数量受到同时已知的远程节点的最大数量,可用的(Erlang)端口的最大数量或可用的最大套接字数量的限制。
答案 1 :(得分:0)
Erlang通过网络连接Erlang节点,而不是Erlang进程。 (并且每个Erlang节点都是操作系统进程)。
当你在一台机器上有几十个Ks的Erlang节点时,你将耗尽TCP连接(这是不合理的),而不是当你在一个Erlang节点上有几十个Ks的Erlang进程时。
(我没有给出任何绝对数字,因为每个Erlang节点也需要与产生另一个网络连接的epmd通信。但是你可能不会在一台机器上有30 + K的Erlang节点,也就是OS进程。)