2

私は現在、ゲームサーバーを作成するプロジェクトに参加しています。すべてのプレイヤーは、gen_fsm 動作を備えた独自のプロセスを持っていると想定されています。start/3 で gen_fsm を開始するには、一意のアトムが必要です。現在、make_ref() を使用して、この ref を ref_to_list/1 でアトムにする方法を見つけました。しかし、この投稿によると、それは推奨されておらず、私は彼に同意します.

この問題をどのように解決しますか?local オプションで gen_fsm を開始するとき、それを識別するためのアトムが必要です。

4

3 に答える 3

7

gen_fsm:start/3必要な唯一のアトムを使用する場合は、コールバック モジュール名です。そうすれば、自動的に一意になる PID (プロセス ID) を追跡するだけで済みます。

後でプロセスにアクセスする必要がある場合はgen_fsm、PID をある種のマッピング テーブルに保存するか、プロセスに名前を付けます (以前と同じように)。

于 2011-05-02T13:52:42.737 に答える
2

何かが足りないのかもしれませんが、localオプションを指定しない、つまり gen_fsm プロセスに名前を付けないのが最善の方法のようです。

erlang vm のインスタンスが使用できる一意のアトムの数には制限があることに注意してください。したがって、ランダムなアトムを大量に生成することは、おそらく悪い考えです。

于 2011-05-02T13:57:37.973 に答える
0

gproc (https://github.com/esl/gproc) が表示され、erlang 用語をプロセスの pid() に関連付けるためのプロセス レジストリが作成されます。開始された各 gen_fsm プロセスを一意のアトムに登録することはお勧めできません。

于 2011-05-02T13:53:48.830 に答える