1

モジュールから他のモジュールのデータを取得できるか知りたいです。私は ejabberd サーバー 15.10 を使用しています。Erlang を使用してモジュールを実装しました。

これがケースです:

  • メッセージをフィルタリングするモジュールがあります: mod_filter
  • サーバーの実行中に計算を行う別のモジュールがあります: mod_calculate

ejabberd サーバーがmod_filterでメッセージをフィルタリングするたびに mod_calculateから新しいデータを取得することは可能ですか?

4

2 に答える 2

0

@Amiramix が述べていることは正確ですが、全体像ではありません。

ejabberd には、モジュール間でイベントを通信する低結合メカニズムがあります。これは、フックとハンドラーの概念です。リンクは MongooseIM のドキュメントを指していますが、このメカニズムは両方のコードベースでほぼ同じです。

一般に、1 つのモジュールでhookを呼び出すことができます。これは関数呼び出しに似ていますが、登録されたハンドラーによっては、実行されるアクションが発生する場合と発生しない場合があります。他のモジュールは、選択したフックのハンドラーを登録できます。問題のモジュールを作成している場合、これは必要な通信チャネルを提供するメカニズムです。

物事をより具体的にするために、アクセスできるmod_filter情報が必要になるたびに、カスタムフック名で実行できます。そのフックのハンドラーを (通常はその関数で) 登録する場合、 に関連するデータを返すことができます。ただし、さまざまなモジュールがフックのハンドラーを実装できるため、直接関数呼び出し ( など) を使用した場合のように、 とは結合されません。mod_calculateejabberd_hooks:run_fold/4mod_calculatestartmod_filtermod_filtermod_calculatemod_calculate:some_function(...)

于 2016-02-14T20:29:27.537 に答える
0

データはモジュールではなく変数に保存されます。また、あるモジュール内のコードが動作する内部変数にアクセスすることはできません。そのモジュールは、何らかの方法でそれらの変数を外部の世界にエクスポートしなければなりません。

モジュールには、すでにエクスポートされた関数が含まれている場合があります。確認する:

rp(mod_calculate:module_info()).

これにより、モジュールでエクスポートされたすべての関数が表示されます。これらの関数の一部は、変数をモジュールから他のモジュールに公開する場合があります。そうでない場合は、そのような関数を追加してから呼び出す必要がありますmod_filter

于 2016-02-13T14:35:48.800 に答える