问题标签 [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 投票
2 回答
254 浏览

erlang - 发送消息时确保 gen_fsm/gen_server 进程存在

在向其发送消息/事件之前,在 Erlang 中确保某个进程存在的最推荐方法是什么?在我的场景中,我在第一次出现消息时开始处理,然后它保持活动状态。在继续传递更多消息的同时,我首先尝试使用相同的名称启动进程以确保它已启动,如下所示(使用gen_fsmsimple-one-for-one重新启动场景):

我相信这个解决方案并不完美,可能会有一些开销,但仍然相信它比使用erlang:is_process_alive. 我对吗?任何想法如何改进它?

0 投票
2 回答
972 浏览

erlang - Erlang:为什么我不能链接两个 gen_servers?

我有两个 gen_server 模块。
第一个服务器.erl

user.erl(除了 init/1 完全一样):

我以为服务器会永远存在。如果第一台服务器死机,另一台服务器会收到{'EXIT', Pid, Reason}消息。

但是如果您通过serv:start_link()启动模块,用户模块将在启动后立即退出并显示消息{'EXIT',Pid,normal}用户为什么会死?

0 投票
2 回答
329 浏览

design-patterns - 在 Erlang 中实现取消

假设我有一个 gen_server 可以执行一些长时间运行的任务。取消任务的最佳和最干净的方法是什么?

0 投票
1 回答
96 浏览

erlang - Erlang - 库与服务器

我学习/编程 Erlang 越多,我就越意识到我必须学习。但在这里我想确认或消除我一直在做的一个假设:

假设有两个模块。一个我打包成一个库;另一个我打包为服务器。问:为什么要区分?

假设:第二个模块中的功能要么需要保持与系统其余部分隔离的状态,要么与其他功能同时运行。

这是真的吗?将模块打包为服务器的仅有两个原因吗?

谢谢,

LRP

0 投票
0 回答
599 浏览

erlang - erlang:生成服务器和状态

作为一个练习来测试我对顺序 Erlang 的理解,我编写了一个简单的 html 标签编辑器。

它维护文本中的当前位置,例如编辑状态,在这样的记录中:

...其中 a 保存当前段落上方的文本,b 保存当前段落,c 保存当前段落下方的文本。

它是这样调用的:

函数 do/2 是递归函数,如下所示:

现在我想把这个模块变成一个 OTP 生成服务器,但意识到我并不真正了解如何维护状态。

我创建了一个状态记录:

我的想法是使用一对一的主管,这样每个用户都在他/她自己的进程中工作,放弃编辑循环,并使用 handle_call(或 handle_cast)来调用各自的编辑函数。

但令我困惑的是:

只要进程在运行,想必用户状态就在进程中保持,但是handle_call和handle_cast都以State为参数,返回State。

这是否意味着我还必须在各自进程之外维护每个用户的状态,也许是在 ets 中?

还是有更好的方法来完全做到这一点?

非常感谢,

LRP

0 投票
2 回答
378 浏览

erlang - gen_server 在 httpc 调用后没有收到消息

我有一个进程向 gen_server 发送暂停消息,如下所示:

在我的 gen_server 中,我在 handle_cast 中捕获这些消息,如下所示:

真正奇怪的是,我的一个 gen_servers 似乎经常没有收到暂停消息——我没有收到更大的消息,并且有问题的进程不会响应随后的暂停(或恢复)尝试。

关于可能发生的事情有什么想法吗?

gen_server 非常简单,它使用 erlang:send_after/3 向自己发送“poll”消息。收到此轮询消息后,如果没有暂停,它会点击一个 url 并将响应保存到 ETS 并触发另一个 erlang:send_after/3 在适当的时间间隔后再次轮询。如果它暂停,它只会触发另一个 erlang:send_after?3

所有 pause 都将状态设置为 paused = true

使用观察者,卡住的进程显示当前函数是 httpc:handle_answer 并且消息队列正在备份

状态选项卡:信息“超时”提示“系统消息可能未被此进程处理”

堆栈跟踪的顶部显示 httpc:handle_answer httpc.erl:636

0 投票
3 回答
3317 浏览

erlang - 来自 gen_server 的 no_proc 异常

执行以下代码时 gen_server 引发异常

输出:

上面的代码有什么问题?编译完drop模块后需要编译gen_server模块吗?

0 投票
1 回答
917 浏览

erlang - Erlang gen_server 实现

在下面的代码中,为什么模块prime_server没有加载?

输出:

0 投票
3 回答
2562 浏览

erlang - Erlang gen_server 进程超时

我必须实现几个小时的 erlang gen_server 进程。但是在超时后 gen_server 进程应该被杀死。这些过程是动态启动的,因此使用了动态监督。这个想法是在进程初始化上使用 timer:apply_after() 。所以 gen_server 进程的 init 看起来像这样

我对 erlang 有点陌生,所以问题是这种方法是好的还是有一些缺点?有更好的解决方案吗?

谢谢!

0 投票
2 回答
1710 浏览

asynchronous - Erlang:使用 gen_server:cast/2 和标准消息传递之间的区别

我正在解决一个问题,并注意到以前的程序员使用 PID 的标准约定传递消息的一些代码!信息。我一直在使用 gen_server:cast/2。我想知道是否有人可以向我解释在两者之间进行选择时的关键差异和考虑因素?