我想知道是否有可能從模塊中獲取其他模塊的數據。我使用ejabberd服務器15.10,我使用Erlang實現了模塊。ejabberd模塊間通信
這裏的情況:
- 我有一個過濾消息的模塊:mod_filter
- 我有另一個模塊,使得一些計算的服務器運行時:mod_calculate
是否有可能每次都從mod_calculate得到新鮮的數據ejabberd服務器過濾器消息mod_filter。
我想知道是否有可能從模塊中獲取其他模塊的數據。我使用ejabberd服務器15.10,我使用Erlang實現了模塊。ejabberd模塊間通信
這裏的情況:
是否有可能每次都從mod_calculate得到新鮮的數據ejabberd服務器過濾器消息mod_filter。
數據沒有被存儲在模塊但在變量。而且你無法訪問一個模塊中代碼運行的內部變量,而沒有那個模塊以某種方式將這些變量導出到外部世界。
模塊可能已經銷往一些功能。請與:
rp(mod_calculate:module_info()).
這將顯示模塊中導出的所有功能。其中一些功能可能會將變量從模塊暴露給其他模塊。如果沒有,那麼你需要添加這樣的功能,並從mod_filter
調用它們。
什麼@Amiramix聲明是準確的,但它不是全貌。
有一個低耦合機制ejabberd通訊模塊之間的事件 - 這是hooks and handlers概念。鏈接指向MongooseIM文檔,但這種機制在兩個代碼庫中都差不多。
一般來說,一個模塊可以調用鉤,這是一樣的函數調用,但根據註冊處理程序可能或可能不導致一些動作(一個或多個)被執行。其他模塊可以註冊處理程序的鉤子,他們選擇。如果您正在編寫相關模塊,則這是一種可能爲您提供所需通信渠道的機制。
爲了使事情更具體 - 每次mod_filter
需要一些信息,只有mod_calculate
有權訪問,它可以運行ejabberd_hooks:run_fold/4
與自定義掛鉤名稱。如果mod_calculate
註冊該掛鉤的處理程序(通常在其start
函數中),它可以返回一些與mod_filter
相關的數據。然而,不同的模塊可以實現對鉤的處理程序,所以mod_filter
和mod_calculate
不耦合,因爲他們是,如果你使用了直接函數調用(如mod_calculate:some_function(...)
)。
非常感謝您的回答! – Jack
不客氣! :-) – Amiramix