问题标签 [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.
erlang - 我怎么知道这是由 erlang 中的主管重新启动我的进程的最后一个周期
我有一个有孩子的simple_one_for_one
主管。gen_fsm
我希望每个gen_fsm
孩子只在最后一次终止时发送一条消息。有没有办法知道最后一个周期是什么时候?
这是我的主管:
这Pid
是启动监督者并下达命令启动子进程的进程的 Pid。
我的观点是,如果进程在任何状态下失败,它应该仅在它最后一次由主管重新启动时发送消息(根据其重新启动策略)。
如果gen_fsm
失败,它是否从具有相同状态数据的相同状态重新启动?如果不是,我怎么能导致它发生?
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
谢谢
elixir - 在 Elixir 应用中配置多个存储库
我正在尝试使用Ecto在我的 Elixir 应用程序中配置两个存储库。
我需要帮助来配置它们,以便使用 one_for_one 策略独立监督它们;我认为这是正确的,这意味着使用它们的进程将重新启动
回购 A 和回购 B
mix.exs 设置:
MyApp_app.ex
片段如下:
当我mix run
得到以下信息时 - 我不确定如何正确定义id。
erlang - 主管创建多个孩子时的问题
我有一个主管。我从作为 gen_server 的孩子那里得到 child_specs。我首先为一个主管 - 孩子关系写了这个。后来我想让那个主管开始生很多孩子。但是我在子 gen_server 中有一些 ets 表作为状态。因此,当主管试图创建第二个孩子时,它会抛出如下异常:
我猜测由于 ets 是共享的,当主管转到第二个孩子的 init 函数时,它已经看到了一个 ets 表,因此出现异常,但不知道如何解决。不过,这只是一个猜测。
这就是我从子 gen_server 获取子规格的方式
gen_server 的 init() 函数是
我是 erlang 的一个完整的初学者,因此很难。
谢谢 !
erlang - 创建 N 个与主管共享一个 ETS 表的孩子
我创建了一个主管来启动孩子,每个孩子都在创建自己的 ETS 表。基本上,一切看起来都很好,除了当我尝试启动 50 多个孩子时,它说数据库表太多,这也是一个糟糕的设计。我想以这样一种方式实施,即主管创建孩子并且所有孩子都使用一个 ETS 表。即使孩子想要写入 ETS 表,它也会写入全局 ETS 表。
我试图谷歌但找不到任何帮助。
谢谢!
erlang - 在主管启动后启动动态 simple_one_for_one 工作人员
我有一个Supervisor
监督许多simple_one_for_one
工作人员的名字,这些工作人员定期为我系统上的每个用户执行一项任务。
我希望应用程序在第一次启动时为每个用户启动一个工作人员Supervisor
,并且我希望应用程序Supervisor
在以后重新启动时执行相同的操作,无论出于何种原因。
目前我在Application
'sstart(type, args)
回调中动态启动所有子进程,但如果Supervisor
重新启动,则不会启动所有子进程。
如何确保在Supervisor
启动/重启后立即启动所有动态子工作人员?
(我的应用在 Elixir 中,但同样的原则也适用于 Erlang。)
erlang - 唯一的主管/服务器名称
我有一个主管结构,每个(TCP)连接都需要一个主管。现在似乎每个主管都需要它自己的唯一名称,而这又需要是一个原子(至少这是我从错误消息中收集到的)。
一种解决方法是每次生成一个新原子,类似于来自 erlang-questions list 的建议。
现在我了解到原子永远不会被清理,所以有可能被太多的连接DoSed,耗尽原子空间。这是如何正确完成的?
elixir - 修改代码后 Elixir 的节点间函数调用会失败
我正在测试这样的节点间函数调用(rpc):
然后我运行dbserver
node,调用接收rcp,在另一个node执行上面的Task.Supervisor.start_link(name: DBServer.DistSupervisor)
代码dbserver
dbclient
它可以正确运行 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
提前致谢!
elixir - 生成一个受监督的进程以定期报告心跳
我正在尝试生成一个进程,该进程将每五秒发布一个 HTTP 请求,以向服务器报告它的心跳。我的代码是:
但是,当我尝试启动应用程序时,它会退出并出现以下错误:
我所需要的只是一些进程,它将作为监督树的一部分运行并在指定的时间间隔内发送它的请求。它本身不需要能够接收任何消息,我也不太在意特定的实现。
谁能建议我在这里做错了什么阻止了这个过程的开始,是否有更好的方法来实现这一点?
task - 在 Elixir 中使用 supervisor 启动一个应用程序,它会在出错时自动重启
我可以在 elixir 上运行应用程序,但如果发生错误,一切都会存在。我只想在这种情况下重新启动我的应用程序。我正在使用主管,但甚至不知道它是否有效。以下是我的代码:-
mix.exs:-
service_monitor.ex
注册表.ex
现在我正在使用以下命令运行我的应用程序:-
这一切都运行良好,直到我在我的主代码中收到错误。应用程序存在并且永远不会重新启动。我收到的错误是:-
请帮助我在哪里出错。我的要求是应用程序应在收到错误后立即自动重启。