【问题标题】:Storing pid of GenServer for future use存储 GenServer 的 pid 以供将来使用
【发布时间】:2018-06-03 00:17:54
【问题描述】:

我需要在应用程序启动时启动 GenServer,但是调用和转换 Genserver 需要它的 PID。我将如何在应用程序的其余部分中获得它以供将来使用。

【问题讨论】:

  • 创建一个名为GenServer 怎么样?请参阅GenServer.start_link/3 中的:name 选项。
  • 存储PID 通常不是一个好主意,因为PID 无法在崩溃中幸存,而name 可以。
  • @Dogbert 谢谢。将使用 :name

标签: elixir phoenix-framework gen-server


【解决方案1】:

如果 GenServer 死机并由主管重新启动,它将收到新的 pid,而您“存储”的 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 部分了解更多详细信息。

【讨论】:

  • 谢谢。将使用名称
  • 是的。谢谢
  • 请注意,我们通常使用__MODULE__ 作为名称。
  • 当然,__MODULE__ 是一个常见的约定,我经常使用它。一切都取决于用例,简单的原子作为名称也是完全有效的。模块名称也在最后的原子中。
猜你喜欢
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2015-12-22
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多