2011-04-22 55 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