【问题标题】:question about inter-process messaging关于进程间消息的问题
【发布时间】:2010-11-08 18:40:07
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: erlang


    【解决方案1】:

    Erlang 的一些限制:Efficiency Guide User's Guide / 10 Advanced:

    分布式节点 已知节点 如果在 X 上存在来自 Y 的任何 pid、端口、引用或 funs(Erlang 数据类型),或者如果 X 和 Y 连接,则节点 X 必须知道远程节点 Y。一个节点同时/曾经知道的最大远程节点数受节点名称可用的最大原子数限制。所有关于远程节点的数据,除了节点名 atom 外,都被垃圾回收。

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

    【讨论】:

      【解决方案2】:

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

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

      (我没有给出任何绝对数字,因为每个 Erlang 节点还需要与 epmd 通信,这会产生另一个网络连接。但无论如何,你可能不会在一台机器上拥有 30+K 个 Erlang 节点,也就是 OS 进程。)

      【讨论】:

      • Erlang 节点是全网状连接的,所以 64K 代表网络中所有连接的节点,而不是单个节点。拥有这么多节点也是不合理的:)
      • 如果 IM 需要并需要在超过 64k CPU 内核上运行... ;-)
      • 非常感谢!我发现当进程通过不同的机器连接时确实如此。但是,当它们在同一台机器上时,每个进程都通过 127.0.0.1 使用 tcp 连接(可能到 epmd?)。这似乎不是什么大问题,因为环回地址很丰富:)
      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2020-03-23
      • 2011-09-23
      • 2013-02-24
      • 2022-12-10
      相关资源
      最近更新 更多