问题标签 [erlang-supervisor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
237 浏览

erlang - 我怎么知道这是由 erlang 中的主管重新启动我的进程的最后一个周期

我有一个有孩子的simple_one_for_one主管。gen_fsm我希望每个gen_fsm孩子只在最后一次终止时发送一条消息。有没有办法知道最后一个周期是什么时候?

这是我的主管:

Pid是启动监督者并下达命令启动子进程的进程的 Pid。

我的观点是,如果进程在任何状态下失败,它应该仅在它最后一次由主管重新启动时发送消息(根据其重新启动策略)。

如果gen_fsm失败,它是否从具有相同状态数据的相同状态重新启动?如果不是,我怎么能导致它发生?

0 投票
1 回答
1183 浏览

elixir - Elixir 中的动态主管规范

我创建了一个 GameSupervisor 监督模块,用于动态创建实例 GameServer (GenServer) 的子级。我可以看到在调用 GameSupervisor.start 函数时调用了 GameServer 的 start_link 方法,但它不会使 pid 保持活动状态。如果重启策略设置为临时,iex 中的 Process.alive?(pid) 总是返回 false。如果我将重启设置为瞬态或永久,当我在该 pid 上调用 GenServer.cast 时,它最终会再次调用 GameServer.start_link。

调用 start_child 是否不会自动将 pid 添加到监督树并使其保持活动状态?

GameSupervisor.ex

游戏服务器.ex

谢谢

0 投票
1 回答
945 浏览

elixir - 在 Elixir 应用中配置多个存储库

我正在尝试使用Ecto在我的 Elixir 应用程序中配置两个存储库。
我需要帮助来配置它们,以便使用 one_for_one 策略独立监督它们;我认为这是正确的,这意味着使用它们的进程将重新启动

回购 A 和回购 B

mix.exs 设置

MyApp_app.ex

片段如下:

当我mix run得到以下信息时 - 我不确定如何正确定义id

0 投票
2 回答
61 浏览

erlang - 主管创建多个孩子时的问题

我有一个主管。我从作为 gen_server 的孩子那里得到 child_specs。我首先为一个主管 - 孩子关系写了这个。后来我想让那个主管开始生很多孩子。但是我在子 gen_server 中有一些 ets 表作为状态。因此,当主管试图创建第二个孩子时,它会抛出如下异常:

我猜测由于 ets 是共享的,当主管转到第二个孩子的 init 函数时,它已经看到了一个 ets 表,因此出现异常,但不知道如何解决。不过,这只是一个猜测。

这就是我从子 gen_server 获取子规格的方式

gen_server 的 init() 函数是

我是 erlang 的一个完整的初学者,因此很难。

谢谢 !

0 投票
2 回答
160 浏览

erlang - 创建 N 个与主管共享一个 ETS 表的孩子

我创建了一个主管来启动孩子,每个孩子都在创建自己的 ETS 表。基本上,一切看起来都很好,除了当我尝试启动 50 多个孩子时,它说数据库表太多,这也是一个糟糕的设计。我想以这样一种方式实施,即主管创建孩子并且所有孩子都使用一个 ETS 表。即使孩子想要写入 ETS 表,它也会写入全局 ETS 表。

我试图谷歌但找不到任何帮助。

谢谢!

0 投票
1 回答
418 浏览

erlang - 在主管启动后启动动态 simple_one_for_one 工作人员

我有一个Supervisor监督许多simple_one_for_one工作人员的名字,这些工作人员定期为我系统上的每个用户执行一项任务。

我希望应用程序在第一次启动时为每个用户启动一个工作人员Supervisor,并且我希望应用程序Supervisor在以后重新启动时执行相同的操作,无论出于何种原因。

目前我在Application'sstart(type, args)回调中动态启动所有子进程,但如果Supervisor重新启动,则不会启动所有子进程。

如何确保在Supervisor启动/重启后立即启动所有动态子工作人员?

(我的应用在 Elixir 中,但同样的原则也适用于 Erlang。)

0 投票
1 回答
159 浏览

erlang - 唯一的主管/服务器名称

我有一个主管结构,每个(TCP)连接都需要一个主管。现在似乎每个主管都需要它自己的唯一名称,而这又需要是一个原子(至少这是我从错误消息中收集到的)。

一种解决方法是每次生成一个新原子,类似于来自 erlang-questions list 的建议

现在我了解到原子永远不会被清理,所以有可能被太多的连接DoSed,耗尽原子空间。这是如何正确完成的?

0 投票
1 回答
663 浏览

elixir - 修改代码后 Elixir 的节点间函数调用会失败

我正在测试这样的节点间函数调用(rpc):

然后我运行dbservernode,调用接收rcp,在另一个node执行上面的Task.Supervisor.start_link(name: DBServer.DistSupervisor)代码dbserverdbclient

可以正确运行 rpc,如下所示。

dbserver

dbclient

但是,将代码从“更改"test""test test”后,dbclient 节点不起作用。

这是错误消息

dbserver

dbclient

此外,它在手动重新启动后确实有效。dbserver

有趣的是,它适用iex任何代码。

我的问题是,

  • 从另一个节点调用节点中的函数是错误的方法吗?
  • 使用节点间函数调用时,每次更改客户端代码时是否必须重新执行被调用节点?
  • iex为什么和之间的行为不同elixir script

代码和整个项目上传到这里:https ://github.com/ayamamori/rpc_test/blob/master/lib/rpc_test.ex

提前致谢!

0 投票
1 回答
347 浏览

elixir - 生成一个受监督的进程以定期报告心跳

我正在尝试生成一个进程,该进程将每五秒发布一个 HTTP 请求,以向服务器报告它的心跳。我的代码是:

但是,当我尝试启动应用程序时,它会退出并出现以下错误:

我所需要的只是一些进程,它将作为监督树的一部分运行并在指定的时间间隔内发送它的请求。它本身不需要能够接收任何消息,我也不太在意特定的实现。

谁能建议我在这里做错了什么阻止了这个过程的开始,是否有更好的方法来实现这一点?

0 投票
1 回答
1031 浏览

task - 在 Elixir 中使用 supervisor 启动一个应用程序,它会在出错时自动重启

我可以在 elixir 上运行应用程序,但如果发生错误,一切都会存在。我只想在这种情况下重新启动我的应用程序。我正在使用主管,但甚至不知道它是否有效。以下是我的代码:-

mix.exs:-

service_monitor.ex

注册表.ex

现在我正在使用以下命令运行我的应用程序:-

这一切都运行良好,直到我在我的主代码中收到错误。应用程序存在并且永远不会重新启动。我收到的错误是:-

请帮助我在哪里出错。我的要求是应用程序应在收到错误后立即自动重启。