2011-04-22 78 views
5

我正在编写一个分布式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的选项列表。但是,我一直无法找到关于此主题的任何文档。这可能吗?

感谢您的帮助! :)

+0

吗?如果是,那么你应该使用某种包含erlang条款的配置文件并使用“file:consult”模块。 – Arunmu 2011-04-23 09:45:01

+0

是的,我希望这是可配置的,并将这些信息存储在一个文件中,这个文件是用file:consult来处理的,正如你所建议的那样,肯定会起作用。然而,我的主要问题是如何真正让分配机制接受我指定的选项来启用压缩 - 这是我无法找到任何文档的。 – 2011-04-23 16:20:02

+0

如果您的数据被压缩,您将如何匹配您的数据? – Arunmu 2011-04-24 05:39:12

回答

0

您是否在节点之间使用rpc节点?还是OTP行为?如果是这样的话,尝试在发送之前用zlib压缩二进制文件

3

如果我正确理解代码,在the line 1565 of dist.c/dsig_send()附近硬编码的消息编码,所以无法修改消息的编码方式而无需修补和重新编译模拟器。

但是,您可以按照here所述更改邮件分发的运营商。有an example of use SSL for Erlang distribution。所以你可以创建一个压缩所有传输消息的连接(也许甚至可以通过调整的SSL例子)。

有标准的分配模块几个例子:

+0

好的,谢谢!这当然回答了我的问题,而你实施另一个分销商的想法很有趣......我会研究这一点。再次感谢。 :) – 2011-04-29 13:36:09