我见过人们使用口述、命令、记录用于维护我读过的许多博客中的状态。我发现这是一个非常重要的概念。
一般来说,我理解维护状态和递归的含义,但是当涉及到 Erlang 时......我对它的处理方式有点模糊。
有什么帮助吗?
维护状态的最简单方法是使用gen_server
行为。您可以阅读更多内容学习一些 Erlang http://learnyousomeerlang.com/clients-and-servers and in the docs http://www.erlang.org/doc/design_principles/gen_server_concepts.html.
gen_server
是过程,可以是:
- 以给定状态初始化,
- 可以定义同步和异步回调(同步用于以“请求响应样式”查询数据,异步用于以“即发即忘”样式更改状态)
它还具有一些不错的 OTP 机制:
- 它可以被监督
- 它为您提供基本的日志记录
- 它的代码可以在服务器运行时升级而不会丢失状态
- 等等...
从概念上讲gen_server
是一个无限循环,看起来像这样:
loop(State) ->
NewState = handle_requests(State),
loop(NewState).
处理请求的地方接收消息。这样所有请求都会被序列化,因此不存在竞争条件。当然,向您提供我所描述的所有好东西有点复杂。
您可以选择要使用的数据结构State
。使用记录很常见,因为它们有命名字段,但从 Erlang 17 开始,映射就可以派上用场了。这取决于您要存储的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)