2017-12-20 4 views
2

アプリケーション開始時にGenServerを起動する必要がありますが、そのPIDはGenserverを呼び出してキャストする必要があります。どのように私は将来の使用のためのアプリケーションの残りの部分を取得します。今後の使用のためにGenServerのpidを保存する

+3

名前付き 'GenServer'の作成はどうですか? 'GenServer.start_link/3'の':name'オプションを参照してください。 – Dogbert

+2

'PID'を格納することは一般的には良い考えではありません。なぜなら、' PID'はクラッシュに耐えられず、 'name'はクラッシュしません。 – mudasobwa

+0

@Dogbertありがとうございます。使用する:名前 –

答えて

7

もしGenServerが死んでスーパーバイザによって再起動されると、新しいpidが送られ、あなたの "保存された"ものはもう有効になりません。あなたはGenServerにアクセスすることができません。その後、コール/キャストは次のようになり

{:ok, _} = GenServer.start_link(MyApp, [:hello], name: :your_genserver_name)

:これは、あなたがここに名前を使うべき理由です

def get_state do 
    GenServer.call(:your_genserver_name, {:get_state}) 
    end 

詳細は、ドキュメントのthis一部をご参照ください。

+0

ありがとう。名前を使用します –

+0

確かに。お返事ありがとうございます –

+0

ありがとう、幸運: – Kociamber

関連する問題