{application, test,
[{description, "RPC server for Erlang and OTP in action"},
{vsn, "0.1.0"},
{modules, [test_app,
test_sup,
test_server]},
{registered, [test_sup, test_server]},
{applications, [kernel, stdlib]},
{mod, {test_app, []}}
]}.
通过代码我们可以看到三个数据,
第一个是application:
就是一个原子说明,说明元组数据是一个应用元组数据。
第二个是test:
很明显,这是我们的应用名称。
第三个是一个数组,我们可以看到数组中保存的所有数据都是以键值对的形式保存的。其中:
1.description,是说明部分。
2.vsn,这个是版本号,一般情况下,这里的版本号最好是按标准的主版本号,次版本号,分版本号来进行填写,因为有的时候,这个版本号会在代码热更新的时候用到。
3.modules,这里存的所有项目模块。
4.registered,注册进程,这个果注册到系统的单例模块进程名。
5.applications,应用启动之前要提前运行的OTP模块进程。
6.mod,应用启动时的模块,以及模块启动时所要代的参数。
三、模块建立
1.模块建立,自然是要先建立test_app.erl模块了,这个模块使用erlang的应用行为模式(application)。这个行为模式只有两个接口一个是启动应用的start,一个是关闭应用的stop.两个接口定义如下。
start(_StartType, _StartArgs) ->
test_sup:start_link().
stop(_State) ->
ok.
可以看到,一个是start(_StartType,StartArgs),一个是stop(_State).一般情况下,start会在他的这个函数中调用你自已编写的监管者行为模式的start_link函数。而stop就只是简单的停止应用。
这里的StartType和StartArgs是应用启动时的两个要传给监督者进程的参数。
2.当我们的应用行为模式模块建好了之后,下一个自然就是用这个应用行为模式启动的应用根监管者行为模式模块test_sup了。监督者行为模式模块的主要任务就是管理其他子监督者模块和工作模块。一般定义模块时,除了监督者模块外其他的都是工作模块了,包括用户自已功能性模块也是工作模块。常见的工作行为模式就是gen_server行为模式,其他的我还没有学到。等学到了再来添加。
在监督者行为模式中,我们会看到下边的几个主要方法:
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
init([]) ->
Server = {tr_server, {tr_server, start_link, []},
permanent, 2000, worker, [tr_server]},
Children = [Server],
RestartStrategy = {one_for_one, 0, 1},
{ok, {RestartStrategy, Children}}.