我正在编写一个分布式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的选项列表。但是,我无法找到有关此主题的任何文档。这可能吗?
感谢您的帮助! :)
答案 0 :(得分:3)
如果我正确理解了代码,则消息编码在the line 1565 of dist.c/dsig_send()周围硬编码,因此如果不修补和重新编译模拟器,就无法更改消息的编码方式。
但是,您可以按照here所述更改邮件分发的载体。有an example of use SSL for Erlang distribution。因此,您可以创建一个压缩所有传输消息的连接(甚至可以通过调整SSL示例)。
标准分发模块的例子很少:
答案 1 :(得分:0)
您是否在节点之间使用rpc?还是OTP行为?如果是这样,尝试在发送之前使用zlib压缩二进制文件