问题标签 [gen-server]

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 投票
3 回答
848 浏览

erlang - gen_server 是否已启动?

有没有办法告诉 gen_server:“主管已经初始化了所有 gen_servers,现在你可以发送消息”?

我有一个工人 gen_server,他的工作是在他的监督树中设置其他 gen_servers 的状态。如果我刚开始在配置服务器的 init 函数中发送消息,有时它会得到 {noproc, _}。我想这意味着配置服务器很快:他在主管有足够的时间启动所有工作人员之前发送了消息。我通过将 timer:sleep(500) 放入 config_server:init() 来解决这个问题,这确保了所有 gen_server 都有足够的时间进行初始化,但这似乎是一个不优雅的解决方案。

有没有合适的方法来做到这一点?

0 投票
2 回答
736 浏览

erlang - Erlang:扩展的 gen_server

我想用一些额外的功能来扩展gen_server(创建一个)。gen_server_extra要求是:

  1. 这些gen_server_extra进程的行为应该像一个常规gen_server的。例如,他们应该通过 接听电话gen_server:call,与 SASL 集成,适合 OTC 监督树等。
  2. gen_server_extra流程应该有一个额外的功能,由gen_server_extra. 这基本上意味着一些消息将由gen_server_extra代码处理,而不会将它们传递给回调模块。其余消息按原样传递给回调模块。
  3. gen_server_extra功能需要它自己的状态,应该对回调模块隐藏。

最简单的方法是什么?

0 投票
2 回答
354 浏览

erlang - gen 服务器同步和异步调用

假设我有一个只处理异步调用的 gen_server(因此只实现了 handle_cast),我应该保留 handle_call 并让它只返回通用的 ok 值,还是应该删除那部分代码并接受警告?

0 投票
1 回答
1042 浏览

erlang - 如何直观地描述 gen_server?

免责声明:作者是 OTP 的新手,对 Erlang 的语法、流程和消息有一些基本的了解。

我试图掌握 Erlang 中行为的概念,但我脑海中浮现出许多问题,使我无法理解像 gen_server 这样的行为的整个原理。

好的,gen_server 的官方文档显示了一个服务器和三个客户端连接的漂亮图表,用查询和回复箭头连接: http ://www.erlang.org/doc/design_principles/gen_server_concepts.html

但是每次我试图进一步理解这个概念时,我都会陷入困境。

有很多概念我无法在脑海中构建成一个更大的概念:

  • 行为实现;
  • 行为容器;
  • 行为界面;
  • 回调模块;
  • 回调函数;
  • API 函数。

我使用以下资源:

我仍然处于“我们在一个模块中调用一个函数,该函数调用另一个函数,该函数创建一个进程......卡住”的状态

有没有办法在图表中描述 gen_server 的概念?如何直观地显示客户端和服务器之间的交互流程?(帮助一个不太聪明的新手直观地理解这个概念)

例如像这里:http: //support.novell.com/techcenter/articles/img/dnd2003080506.gif

UPD:我尝试绘制自己的图表,但我仍然不明白图表中任何连接器的用途:http: //postimage.org/image/qe215ric/full/

UPD2:这与我希望看到的类似: http: //cryptoaarchy.org/wiki/Worker_patterns(模型)。但是,它没有显示模块、函数和进程之间的交互。

0 投票
2 回答
2084 浏览

erlang - gen_server 关闭监听套接字

我想要做的是让一个 gen_server 进程接受一个新客户端并立即产生一个新的孩子来处理下一个。我看到的问题是,当套接字完成并随之终止时,它也会关闭侦听套接字,我不知道为什么,即使它不再引用它。

知道我做错了什么吗?

gen_server:

导师:

0 投票
2 回答
1068 浏览

linux - Erlang,process_flag trap_exit 从 CLI 中杀死我的 gen_server

我有这个正在使用的 gen_server:

问题是,正如我接下来展示的那样,如果我从 cli 执行它,就像erl -pa ebin/ -s user_info_provider start_link它立即死亡一样,但是我可以从控制台生成它并且它可以工作。

如果我不设置process_flag(trap_exit, true)或不直接从控制台启动它,则不会发生这种情况-s module function
我这样启动它是因为真正的 gen_server 要复杂得多,我正在从 Makefile 调用中独立测试它。
有任何想法吗?

0 投票
2 回答
936 浏览

erlang - Erlang OTP 主管

我正在研究 Erlang Programming 一书中的练习 12-2。我有一个模块db_server_otp实现 OTP gen_server 行为。作为一个独立的模块,我已经对其进行了测试,它可以按预期工作。我现在必须为它添加一个主管。基于本章中的示例,我创建了一个模块db_server_sup,如下所示:

两个模块都位于同一个目录中,我用 .beam 文件编译的两个模块位于我启动 erlang shell 的同一个工作目录中。但是,使用 erlang shell,我无法启动主管。

我必须导入db_server_otp模块吗?如果是这样,我必须导入哪些功能?我在db_server_otp中导出我所有的 OTP 方法:

0 投票
2 回答
1670 浏览

erlang - Erlang:在主管下产生多个进程

我正在尝试实现一个简单的主管,如果它们失败,只需让它重新启动子进程。但是,我什至不知道如何在主管下生成多个进程!我在这个网站上查看了简单的主管代码,发现了一些东西

我假设将“echo_server2”部分放在 init() 函数中会在这个主管下产生另一个进程,但我最终得到一个异常 exit:shutdown 消息。

文件“echo_server”和“echo_server2”代码相同,但名称不同。所以我现在很困惑。

0 投票
2 回答
4203 浏览

erlang - 具有长时间运行任务的 Erlang gen_server

再会,

我有一个gen_server进程定期执行一些长期运行的状态更新任务 handle_info

但是当这样的任务运行时,整个服务器会变得无响应,并且对它的任何调用都会导致整个服务器崩溃:

如何避免阻塞 gen_server ?当一个电话my_gen_server:status()在任何时候,结果应该是这样的: {ok, task_active}

0 投票
1 回答
741 浏览

timer - gen_server: 每 X 秒调用一次

gen_server 的状态是一个列表,应该每 X 秒处理一次。因此,我需要每 X 秒执行一次 handle_call({process},State) 。

每 X 秒执行一次 handle_call 的最佳方法是什么?