我见过人们在我读过的许多博客中使用dict,ordict,record来维护状态.我发现它是非常重要的概念.
一般来说,我理解保持状态,递归的含义,但是当涉及到erlang时......我对它是如何处理有点模糊.
有帮助吗?
维护状态的最简单方法是使用gen_server
行为.您可以阅读更多关于学习一些Erlang和文档的内容.
gen_server
是过程,可以是:
用给定状态初始化,
可以定义同步和异步回调(同步用于以"请求 - 响应样式"查询数据,异步用于以"冒烟"方式更改状态)
它还有几个不错的OTP机制:
它可以受到监督
它为您提供基本的日志记录
它的代码可以在服务器运行时升级而不会丢失状态
等等...
概念上gen_server
是一个无限循环,看起来像这样:
loop(State) -> NewState = handle_requests(State), loop(NewState).
处理请求接收消息的位置.这样所有请求都被序列化,因此没有竞争条件.当然,给你所有的好东西,我描述的更复杂一点.
您可以选择要用于的数据结构State
.通常使用记录,因为它们具有命名字段,但是因为Erlang 17映射可以派上用场.这个取决于你想要存储的内容.