Erlang 咖啡 FSM 软件升级实践
1. 咖啡 FSM 初始版本
最初的 Erlang 版本的咖啡有限状态机(FSM)包含三个状态:选择(selection)、支付(payment)和取杯(remove)。为了进行软件升级,我们先添加通用代码来执行完全限定调用,作为升级的基础。可以通过对每个 receive - evaluate 循环调用进行完全限定,或者向进程发送触发完全限定调用的消息来实现。
推荐的代码升级方法是将新模块的加载与每个进程的升级触发分开。在通用升级代码中,使用 module:load_file/2 加载模块,然后通过发送 {upgrade, Data} 消息通知需要触发升级的进程。这里的 Data 是一个不透明的数据类型,包含新模块使用的特定升级信息,可用于在过渡到新模块时操作进程状态。
以下是咖啡 FSM 的通用升级代码示例:
-module(coffee).
-export(...).
-export([..., code_change/2]).
-vsn(1.0).
...
%% State: drink selection
selection() ->
receive
...
{upgrade, Data} ->
?MODULE:code_change(fun selection/0, Data);
...
end.
%% State: payment
超级会员免费看
订阅专栏 解锁全文
479

被折叠的 条评论
为什么被折叠?



