【发布时间】:2011-08-11 00:06:41
【问题描述】:
我正在编写一个分布式 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 的选项列表。但是,我无法找到有关此主题的任何文档。这可以吗?
感谢您的帮助! :)
【问题讨论】:
-
你想让压缩选项可配置吗?如果是,那么您应该使用某种包含 erlang 术语的配置文件并使用“file:consult”模块。
-
是的,我希望这是可配置的,并且按照您的建议,将此信息存储在使用 file:consult 处理的文件中肯定会起作用。但是,我的主要问题是如何让分发机制真正接受我指定的选项以打开压缩 - 这是我无法找到任何文档的原因。
-
如果数据被压缩,你会如何匹配你的数据?
-
检查此链接是否为您提供任何见解:: groups.google.com/group/erlang-programming/browse_thread/thread/…
-
感谢您的建议,但我认为我需要澄清问题。假设我们有两个进程,A 和 B,它们位于不同的节点上。 A 希望向 B 发送消息 M。为此,A 节点上的 Erlang 分发机制首先使用 term_to_binary 将 M 转换为二进制文件,然后通过网络将这个二进制文件发送到 B 的节点。然后 B 的节点使用 binary_to_term 将其转换回 Erlang 术语,并将其放入 B 的消息队列中。我想改变 term_to_binary 的调用方式,但这对 A 和 B 来说是完全透明的,所以模式匹配不受影响。
标签: erlang