问题标签 [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.
erlang - 在 OTP simple_on_for_one 主管中检查现有孩子
我正在写一个 map/reduce word counter 来学习 OTP。我创建了一个可以启动减速器的 simple_one_for_one 主管。对于每个键,我想检查是否已经有一个孩子,如果没有,让主管创建孩子。
我目前在主管模块中启动孩子,如下所示:
我想做这样的事情(未经测试):
有什么好的 OTP 方法可以确定 Key 是否已经有一个孩子?
tcp - 使用 OTP 原则的非阻塞 TCP 服务器
我开始学习 Erlang,所以我想写“你好,世界!” 并发编程,一个 IRC 机器人。
我已经使用 Erlang 编写了一个,没有任何 OTP 细节(主管、应用程序等行为)。我希望使用 OTP 原则重写它,但不幸的是我无法找出使用 OTP 进行套接字编程的“正确”方法。
似乎唯一合理的方法是手动创建另一个进程并将其链接到主管,但肯定有人在某个地方已经这样做过。
erlang - Erlang:分布式应用程序奇怪的行为
我正在使用分布式 erlang 应用程序付费。
配置和想法取自:
http://www.erlang.org/doc/pdf/otp-system-documentation.pdf 9.9。分布式应用程序
- 我们有 3 个节点:n1@a2-X201、n2@a2-X201、n3@a2-X201
- 我们有应用程序wd可以做一些有用的工作:)
配置文件:
- wd1.config - 对于第一个节点:
- 第二个 wd2.config:
- 对于节点 n3 看起来很相似。
现在在 3 个单独的终端中启动 erlang:
- erl -sname n1@a2-X201 -config wd1 -pa $WD_EBIN_PATH -boot start_sasl
- erl -sname n2@a2-X201 -config wd2 -pa $WD_EBIN_PATH -boot start_sasl
- erl -sname n3@a2-X201 -config wd3 -pa $WD_EBIN_PATH -boot start_sasl
在每个 erlang 节点上启动应用程序:* application:start(wd)。
目前一切正常。正如 Erlang 文档中所写:应用程序正在节点n1@a2-X201上运行
现在杀死节点n1:应用程序已迁移到n2
继续我们的游戏:杀死节点n2 再一次系统工作正常。我们在节点n3有我们的应用程序
现在恢复节点n1和n2。所以:
节点n1 和n2又回来了。
看起来现在我必须手动重新启动应用程序:* 让我们先在节点n2上执行此操作:
- 好像挂了。。。
- 现在在n1重新启动它
有用。并且节点n2也返回了 OK:
在节点n3我们看到:
一般来说,一切看起来都不错,如文档中所写,除了在节点n2启动应用程序的延迟。
现在再次杀死节点n1 :
操作...一切都挂起。应用程序未在另一个节点重新启动。
实际上,当我写这篇文章时,我意识到有时一切都好,有时我有问题。
任何想法,虽然在恢复“主”节点并再次杀死它时可能会出现问题?
erlang - gen_server 是否已启动?
有没有办法告诉 gen_server:“主管已经初始化了所有 gen_servers,现在你可以发送消息”?
我有一个工人 gen_server,他的工作是在他的监督树中设置其他 gen_servers 的状态。如果我刚开始在配置服务器的 init 函数中发送消息,有时它会得到 {noproc, _}。我想这意味着配置服务器很快:他在主管有足够的时间启动所有工作人员之前发送了消息。我通过将 timer:sleep(500) 放入 config_server:init() 来解决这个问题,这确保了所有 gen_server 都有足够的时间进行初始化,但这似乎是一个不优雅的解决方案。
有没有合适的方法来做到这一点?
erlang - gen 服务器同步和异步调用
假设我有一个只处理异步调用的 gen_server(因此只实现了 handle_cast),我应该保留 handle_call 并让它只返回通用的 ok 值,还是应该删除那部分代码并接受警告?
erlang - 关于 HTTP 服务的 Erlang 设计建议
我是 Erlang 的新手,但由于我的并发需求,我想开始使用一个感觉适用于该技术的应用程序。
这张照片突出了我想做的事情。
由于用户在 Django 应用程序中将某些输入作为表单的结果,消息从队列中拉出并路由到先前设置的工作进程。该设置需要一些额外的数据库(预先存在的数据库,因此我不想为此位使用 ETS/DETS)查找,然后与消息路由器对话并创建相关进程。
考虑到我可能想在未来向我的 Django 应用程序询问所有需要设置并首先为他们分配任务的工作人员,我的问题随之而来,这里最好的交流方式是什么。我喜欢 HTTP/json 并且已经阅读了我在 Mochiweb 和 MochiJson 上能找到的一些东西,我认为这可以满足我的需求。我正计划拥有一个 OTP 主管和应用程序,那么拥有一个单独的 mochiweb 进程然后将 erlang 消息传递给路由器是否明智?
由于所有教程都在谈论如何使用脚本创建目录结构,我在使用 mochiweb 时遇到了一些困难,这似乎使 mochiweb 以设计为中心——这不是我想要的,我想要一个轻量级的 mochiweb 进程偶尔工作。
请撕开这个,欢迎大家评论。
干杯
戴夫
erlang - simple_one_for_one start_child() 返回 already_started
我有一个应该开始simple_one_for_one
工人的主管。当我第一次打电话start_child()
时,一切都很顺利。但是,当我第二次这样做时,我得到了{error,{already_started,<0.71.0>}}
. 为什么simple_one_for_one
主管会给我回一个already_started
?我错过了什么?
这是代码:supervisor,worker。
erlang - gen_server 中的数据在其主管重新启动后是否会保留?
我有一个启动许多 gen_server 的主管。每个 gen_server 都有大量的数据负载,这需要很多时间。我想知道何时发生错误,存储在 gen_server 的状态及其进程字典中的数据是否会保留以备下次启动,这样我就不需要再次初始化它们了?
erlang - OTP14B02 配置错误
我尝试在 OpenSolaris 上安装 OTP14B02,但在调用时出现以下错误./configure
:
什么可能导致这个问题,我该如何克服它?
erlang - erlang/OTP 中的限速事件处理程序
我有一个以潜在高速率产生点的数据源,我想对每个点执行可能很耗时的操作;但我也希望系统在过载时通过丢弃多余的数据点来优雅地降级。
据我所知,使用 gen_event 永远不会跳过事件。从概念上讲,我希望 gen_event 做的是在再次运行处理程序之前删除除最新待处理事件之外的所有事件。
有没有办法用标准 OTP 做到这一点?还是有充分的理由为什么我不应该那样处理事情?
到目前为止,我最好的方法是使用 gen_server 并依靠超时来触发昂贵的事件:
这种方法正确吗?(特别是关于监督?)