问题标签 [erlang-otp]

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 回答
1667 浏览

erlang - Erlang应用问题

我尝试将应用程序写入我的 Erlang 程序。

我有 test_app.erl:

和 .app 文件:

当我尝试启动应用程序时:

我得到错误:

怎么了?我该如何解决?

如果我在 eshell 中制作:

比所有的作品。

谢谢你。

0 投票
2 回答
2446 浏览

erlang - 处理 gen_server 状态的清理

我有一个gen_server运行,它必须在正常停止或意外崩溃时清理其状态。清理基本上包括删除一些文件。

此时,当gen_server崩溃或正常停止时,清理完成terminate/2

如果崩溃,有什么理由terminate/2不会被调用?gen_server

如果意外死亡,是否应该有任何其他进程监视gen_server等待进行清理的过程?gen_server

所以,代码是这样的:


编辑:我在官方邮件列表中发现了这封电子邮件,它谈论的是同一件事:

http://groups.google.com/group/erlang-programming/browse_thread/thread/9a1ba2d974775ce8

正如亚当在下面所说,如果我们想避免将存在困在 中gen_server,我们可以使用不同的方法。

但是如果我们捕获存在,terminate/2似乎是一个安全的地方进行清理,因为它总是会被调用。此外,我们必须正确处理何时'EXIT'发送到terminate/2handle_call/3尝试在工人和主管之间正确传播错误。

0 投票
3 回答
3315 浏览

erlang - Erlang HTTP 客户端:inets 或 ibrowse 或 ...?

我正在使用 Erlang,需要发出高效的 HTTP 请求。

Erlang/OTP 当前的“标准”HTTP 客户端是什么?

它是 inets 还是 ibrowse 或完全是其他东西?

任何建议或指示表示赞赏。

0 投票
3 回答
1663 浏览

architecture - Erlang OTP 应用程序设计

当我将一些代码转换为 OTP 应用程序时,我正在努力掌握 OTP 开发模型。

我本质上是在制作一个网络爬虫,但我只是不太清楚将执行实际工作的代码放在哪里。

我有一个主管来启动我的工人:

在这个设计中,Crawler Worker 负责做实际的工作:

do_crawl产生了相当多的进程和请求来处理通过 http 进行的爬取工作。

最终的问题是:实际的抓取应该在哪里发生?从上面可以看出,我一直在尝试不同的方式来触发实际工作,但仍然缺少一些对于探索事物组合方式必不可少的概念。

注意:为简洁起见,省略了一些 OTP 管道 - 管道都在那里,系统都挂在一起

0 投票
2 回答
818 浏览

erlang - 如何在动态主管中自动删除终止子项的规范

这个问题不需要USB知识,只是将其描述为使示例更加具体。

我正在尝试为 USB 总线上的特定设备实现动态管理器。这些设备具有地址,并在系统的生命周期内出现和消失。

对于每个设备,我的主管都需要一个动态的孩子。

这些孩子是暂时的,所以一旦它们崩溃或终止,我们就不会重新启动它们(因为那时它们可能已经消失了)。

我有一个进程在特定时间扫描 USB 端口并生成我要处理的 USB 设备的所有地址的列表。

我计划supervisor:which_children/1在每次扫描之前调用以找出哪些设备存在但没有运行子进程。

为了找出哪些地址有孩子在运行,我计划为包含地址的 childspec 创建 Id 原子(只有几个地址可能),例如, adr_12如果孩子处理 address 12

当我尝试启动/重新启动丢失的孩子时,我遇到了一些丑陋的情况,即当临时孩子终止或崩溃时,孩子规范不会自动删除(至少我认为是这样)。所以我需要这样的代码:

然后是我不知道是否supervisor:which_children/1也返回已经终止的孩子的问题。

因此,最好在子节点暂时终止后将其删除。

不知何故,这一切对我来说都是不雅的,所以我问自己(和你):

我怎样才能最优雅地解决这个问题?

在这种情况下完全不使用主管会更好吗?

0 投票
1 回答
3278 浏览

erlang - 在 SUSE 上安装 Erlang

有人知道如何在 openSUSE 11.4(或类似版本)上安装 Erlang 吗?

0 投票
1 回答
627 浏览

erlang - 重新启动孩子时主管会阻止呼叫吗?

我试图了解这里发生了什么:

我有一个主管在不触发MaxR, MaxT机制的情况下循环重启一个客户端。客户端只是缓慢地崩溃,永远不会触发速率限制。

将有另一种机制使用supervisor:which_children/1delete_child/2, start_child/2调整子集以适应现实(它扫描 USB 设备,试图让每个设备找到一个监督子)。

这通常表现为速率限制的安全网,但奇怪的是,它看起来根本没有调用删除和启动子项的机制。

为了找出发生了什么,我supervisor:which_children/1从 shell 调用,看起来调用只是阻塞并且永远不会返回。

是否会在它忙于尝试重新启动孩子时阻止对主管的呼叫?

附录:

看起来崩溃发生在子启动期间:

0 投票
1 回答
5933 浏览

erlang - 达到_max_restart_intensity 的主管如何只删除有问题的孩子?

我有一个one_for_one主管,负责处理类似且完全独立的孩子。

当一个孩子出现问题时,反复崩溃和触发:

关闭自己并终止所有无辜的孩子,否则这些孩子会继续正常运行。

如何从标准 Erlang 监督者中构建监督树,只停止重新启动一个有问题的孩子而让其他孩子独自一人?

我正在考虑增加一个只带一个孩子的主管,但这对我来说似乎很重要。

还有其他方法来处理这个吗?

0 投票
2 回答
3169 浏览

erlang - 在 Erlang 集群中的所有节点上运行 gen_server 的最佳方法是什么?

我正在Erlang 中构建一个监控工具。在集群上运行时,它应该在所有节点上运行一组数据收集功能,并使用 RRD 在单个“记录器”节点上记录该数据。

当前版本在主节点 ( rolf_node_sup) 上运行一个主管,它尝试在集群中的每个节点 ( ) 上运行第二个主管rolf_service_sup。然后,每个节点上的监督者应该启动并监视一堆进程,这些进程将消息发送回主节点上的 gen_server ( rolf_recorder)。

这仅在本地有效。没有在任何远程节点上启动主管。我使用以下代码尝试从记录器节点加载节点上的主管:

我发现有几个人建议主管真的只为本地流程设计。例如

实现我要求在集群中的所有节点上运行监督代码的最 OTP 方式是什么?

  • 建议将分布式应用程序作为分布式主管树的一种替代方案。这些不适合我的用例。它们提供节点之间的故障转移,但保持代码在一组节点上运行。
  • 模块很有趣。但是,它允许在当前负载最少的节点上运行作业,而不是在所有节点上运行。
  • 或者,我可以在主节点上创建一组受监督的“代理”进程(每个节点一个),用于proc_lib:spawn_link在每个节点上启动一个监督者。如果节点上出现问题,代理进程应该死掉,然后由它的主管重新启动,这反过来又应该重新启动远程进程。模块在这里可能非常有用。
  • 或者,也许我过于复杂了。直接监督节点是一个坏主意,相反,也许我应该构建应用程序以更松散耦合的方式收集数据。通过在多个节点上运行应用程序来构建一个集群,告诉一个成为主节点,就这样吧!

一些要求:

  • 该架构应该能够处理节点加入和离开池而无需人工干预。
  • 为了简单起见,我想构建一个单主解决方案,至少最初是这样。
  • 在我的实现中,我更愿意使用现有的 OTP 工具而不是手动代码。
0 投票
1 回答
842 浏览

erlang - Erlang 消息队列是否跨进程持久化?

这应该是一个简单的问题,但我对文档的了解不足以找到答案。

如果 OTP 主管在崩溃后重新启动 gen_server,新的子进程会继承崩溃进程的消息队列,还是在崩溃前发送但尚未被旧子进程处理的消息掉在地上?