erlang - 为什么 Erlang/OTP gen_server 回调模块必须提供 handle_cast 函数?
问题描述
我可以理解为什么回调模块必须提供init
和handle_call
功能。init
用于创建初始状态,并且handle_call
是创建服务器进程的主要目的:服务请求。
但我不明白为什么handle_cast
需要。模块不能gen_server
像许多其他回调一样提供默认实现吗?这可能是一个 noop 像
handle_cast(_, State) -> {noreply, State}.
在我看来,大多数回调模块无论如何都提供像这样的 noops。
解决方案
handle_cast与 类似handle_call
,用于对您正在运行的 gen_server 的异步调用(调用是同步的)。它正在为您处理请求,而不是像那样回复call
。
与此类似,gen_call
它可以更改您的 gen_server 的状态(或保持原样,取决于您的需要和实施)。它还可以像您的呼叫一样停止您的服务器、休眠等 - 请参阅学习一些 erlang以获取示例和更广泛的解释。
正如您在问题中所说,它“可能是一个问题”,但在某些情况下,最好实现和处理对服务器的异步调用。
推荐阅读
- node.js - 在firebase云功能中,孩子正在自我删除
- android - PokeGenie 是如何工作的?它从哪里获取数据?(口袋妖怪GO)
- google-bigquery - BigQuery x Python:如何使用 dbapi 游标将 GEOGRAPHY 插入表中?
- python - 带间隔的滚动平均值
- java - GoogleMap、CameraPosition 以北为目标坐标
- excel - 使用 do while 循环时,我的 VBA 代码不起作用
- rest - 如何从嵌套的 HTTP 客户端访问密钥?
- r - 错误:geom_path:每个组仅包含一个观察值
- android - 如何从另一个类访问函数 - Flutter
- angular - 表单字段以 Angular 中的“必需”错误启动