erlang - 压缩 Erlang 节点之间发送的消息

标签 erlang

我正在编写一个分布式 Erlang 应用程序,其中几个节点通过带宽有限的网络连接。因此,当不同节点上的进程相互发送消息时,我希望能够最小化通过网络发送的数据包的大小。

来自 http://www.erlang.org/doc/apps/erts/erl_ext_dist.html ,我了解 Erlang 分发机制在内部使用 erlang:term_to_binary/1,2 将 Erlang 消息转换为通过网络发送的外部二进制格式。现在,term_to_binary/2 支持几个可用于减小二进制文件大小的选项(http://www.erlang.org/doc/man/erlang.html#term_to_binary-1),包括压缩选项以及选择具有更有效浮点编码的次要版本的能力。

我希望能够告诉分发机制在每次通过网络发送消息时使用这两个选项。换句话说,我希望能够指定分发机制调用 term_to_binary 的选项列表。但是,我无法找到有关此主题的任何文档。这可能吗?

谢谢你的帮助! :)

最佳答案

如果我正确理解代码,则消息编码在 the line 1565 of dist.c/dsig_send() 周围进行硬编码因此,如果不修补和重新编译模拟器,就无法更改消息的编码方式。

但是,您可以按照 here 所述更改消息分发的载体。 .有an example of use SSL for Erlang distribution .因此,您可以创建一个压缩所有传输消息的连接(甚至可以通过调整 SSL 示例)。

标准分发模块的例子很少:

  • inet_tcp_dist.erl
  • inet6_tcp_dist.erl
  • inet_ssl_dist.erl
  • uds_dist示例
  • 关于erlang - 压缩 Erlang 节点之间发送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756234/

    相关文章:

    architecture - 在 OTP/Erlang 中将 ID 映射到进程的惯用方式是什么?

    mongodb - 哪个面向文档的DBMS与erlang应用程序混合?

    scala - Actor 模型是否仅限于特定语言?

    tcp - 使用 gen_tcp :send/2 通过套接字发送消息

    erlang - Erlang 如何定位模块

    ssl - 如何在 Erlang/YAWS 中启用 ssl/crypto

    c - 在 Windows 上链接 erlang nif

    Erlang 生成任意数量的匿名函数?

    erlang - RabbitMQ (beam.smp) 和高 CPU/内存负载问题

    erlang - 如何在 Erlang 中的标准输入上按字符读取