在Erlang/OTP ,Application表示作为一个单元,可以启动和停止,执行一些特定功能的组件,并可以在其它系统中重新使用。Application控制器的模块接口,是在每一个Erlang运行时系统启动的进程,并包含用于控制Application(例如启动和停止Application),以及访问Application的信息(例如配置参数)的功能。
Erlang/OTP Application基本结构:
一个 Application 至少包含了3部分的内容:应用模块、监督者模块、资源文件。
应用模块(test_app.erl) :
-module(test_app).
-behaviour(application).
-export([start/2, stop/1]).
start(_Type, StartArgs) ->
io:format("test app start~n"),
case test_sup:start_link(StartArgs) of
{ok, Pid} ->
{ok, Pid};
Error ->
Error
end.
stop(_State) ->
ok.
监督者模块(test_sup.erl):
-module(test_sup).
-behaviour(supervisor).
-export([start_link/1, init/1]).
start_link(_) ->
io:format("test sup start link~n"),
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
io:format("test sup init~n"),
{ok,{
{one_for_one, 1, 60},
[]}
}.
资源文件(test.app) :
{application,test,
[{description,"Test application"},
{vsn,"1.0.0"},
{modules,[test_app,test_sup]},
{registered,[test_app]},
{mod,{test_app,[]}},
{env,[]},
{applications,[kernel,stdlib]}]}.
erl编译以上代码后,执行命令启动这个Application
1> application:start(test).
test app start
test sup start link
test sup init
ok
查看这个Application有没有加载
2> application:loaded_applications().
[{kernel,"ERTS CXC 138 10","2.16.2"},
{stdlib,"ERTS CXC 138 10","1.19.2"},
{test,"Test application","1.0.0"}]
Erlang/OTP Application启动流程:
1、当erlang 执行application:start(test) 时,erlang会查找工作目录有没有 test.app 这个资源文件,没找到就报错,如果找到,就按照 test.app 这个文件的指示,启动 test 应用。
%% 比较完整的资源文件:
{application,test, % 名称
[{description,"Test application"}, % 描述
{vsn, "1.0.0"}, % 版本
{id, Id}, % id 同 erl -id ID
{modules, [test_app,test_sup]}, % 所有模块,systools用来生成script/tar文件
{maxP, Num}, % 最大进程数
{maxT, Time}, % 运行时间 单位毫秒
{registered, [test_app]}, % 指定名称,systools用来解决名字冲突
{included_applictions, []}, % 指定子app,加载但不启动
{mod, {test_app,[]}}, % 启动模块,[]为参数
{env, []}, % 配置env,可以使用application:get_env获取
{applications,[kernel,stdlib]}]}. % 依赖项,启动app前,将会首先启动的app
2、这里重点看{mod, {test_app,[]}} 参数,意思是告诉 erlang 要调用应用模块(test_app)的start/2 函数。
-module(test_app).
start(_Type, StartArgs) ->
io:format("test app start~n"),
case test_sup:start_link(StartArgs) of
{ok, Pid} ->
{ok, Pid};
Error ->
Error
end.
3、紧接着,到了监督者模块(test_sup),监督者模块启动了一个监督者进程,该进程会回调监督者模块的 init/1 函数,根据这个函数的返回值来启动子进程。
%% 比较完整的监督者模块 init/1 函数,仅参考,下篇再介绍参数意义
init([]) ->
{ok,
{{one_for_one, 1, 60}, % Strategy = {How, Max, Within}
[{ test_handler_worker, % Id = internal id
{test_server, start, []}, % StartFun = {M, F, A}
permanent, % Restart = permanent | transient | temporary
2000, % Shutdown = brutal_kill | int() >= 0 | infinity
worker, % Type = worker | supervisor
[test_server] % Modules = [Module] | dynamic
}]
}
}.
文章完整例子下载http://download.csdn.net/detail/cwqcwk1/6398337
分享到:
相关推荐
3. 应用和发布(Applications and Releases):在Erlang/OTP中,应用(Application)是一组协同工作的进程和模块的集合,它具有明确的接口和依赖关系。每个应用都有一个回调模块,定义了启动、停止和其他生命周期...
4. **OTP应用和监督**:在Erlang和OTP中,应用(Application)是一个组织代码和资源的单元。监督(Supervision)则是OTP的一个关键概念,它描述了进程树的组织方式和错误恢复策略。这通常是构建容错系统时不可或缺的...
在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,这是Erlang OTP(开放电信平台)设计模式中的核心部分。 监督树是Erlang OTP设计原则的重要组成部分,它用于管理...
在本教程中,我们将深入探讨如何使用Erlang构建一个名为"Application"的基本应用程序,这在Erlang生态系统中是一个关键的概念。 在Erlang中,"Application"是一个组织代码的机制,它提供了模块之间的依赖管理和启动...
应用(Application)在Erlang/OTP中是一个封装了代码、模块、资源文件和配置文件的实体,它可以被加载和卸载。应用的设计目的是为了封装功能相关的代码,便于管理和维护。每个应用都具有自己的启动和停止过程,以及...
这包括进程(Process)、GenServer、Supervisor和Application等组件,它们是Erlang/OTP系统中用于构建可靠分布式系统的基石。 4. **工作流引擎**:ilog-elixir的核心部分是其工作流引擎,它负责解析流程定义,调度...
3. **库和工具**:OTP包含一系列预构建的库和工具,如Mnesia(分布式数据库)、GenServer(行为模式,用于实现服务器状态管理)、Supervisor(故障恢复机制)和Application Controller(应用程序生命周期管理)等,...
#### 四、Erlang/OTP框架 ##### 4.1 OTP概念 - **定义**:Open Telecom Platform,是由爱立信开发的一个中间件框架。 - **特点**:支持并发、容错和分布式的应用程序开发。 ##### 4.2 OTP库 - **Supervisor行为*...
OTP(Open Telecommunications Platform,开放电信平台)是Ericsson公司开发的一个开源软件框架,主要用于构建可靠的、可扩展的和高效率的分布式系统,尤其在 Erlang 编程语言中广泛应用。OTP提供了一系列库和工具,...
3. **部署到节点**:将释放包复制到目标Erlang节点的`ebin`目录下,或者使用`release_handler`模块的`add_application/2`或`install_release/1`函数进行远程部署。 4. **启动应用**:调用`application:start/1`或`...
在Erlang OTP(Open Telecom Platform)框架下,`server_app`可能实现了`application`行为,负责应用程序的生命周期管理。它会定义应用的模块、版本、依赖项、以及其他配置参数,同时包含启动和停止应用的函数。 2....
Erlang OTP提供了编译和构建工具`rebar3`或`make`。如果你还没有安装,需要先安装这些工具。 3. **编译步骤**: - 进入`esockd`源代码目录。 - 使用`rebar3 compile`或`make`命令来编译源代码。这将生成`.beam`...
Erlang的OTP(开放电信平台)提供了一套标准库和框架,帮助开发者构建可靠的服务。 ### Consul概述 Consul是由HashiCorp开发的工具,它提供了以下关键功能: 1. **服务发现**:允许服务动态注册和发现其他服务,...
按照的精神,这是用于部分函数应用的Erlang解析转换。 如特殊变量_ ,它允许使用cuts来创建应用了某些参数的匿名函数。 例如,创建一个使用单个整数参数转换为十六进制字符串的函数: > Hex = partial:cut...
要编译esockd,首先确保你已经安装了Erlang OTP环境。然后,从GitHub或其他源获取esockd的源代码,通常以.tar.gz或.zip的形式提供。解压后,进入项目目录,执行以下命令进行编译: ```bash $ rebar3 compile ``` `...
下载并安装Erlang OTP(Open Telecom Platform)后,确保其版本与RabbitMQ兼容,通常推荐最新的稳定版本。 接着,我们下载RabbitMQ安装包。安装过程中,需要注意选择合适的操作系统版本,并根据安装向导进行配置。...
`Application`模块是Erlang OTP(开放电信平台)的一部分,用于管理和控制Elixir应用的生命周期。 3. **启动过程**: 应用启动时,会调用`Application.start/2`函数。这个函数会读取`mix.exs`中的配置,并按照指定...
OTP是Erlang生态系统的核心部分,为Elixir提供了大量用于构建可靠系统的库和设计原则。其中的关键组件包括: - **GenServer**:一个通用服务器行为,用于实现状态管理和服务请求的回调模式。 - **GenEvent**:处理...