`
cwqcwk1
  • 浏览: 86897 次
文章分类
社区版块
存档分类
最新评论

Erlang/OTP 构建 Application

 
阅读更多

在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

分享到:
评论

相关推荐

    Erlang_OTP_设计原理 中文版

    3. 应用和发布(Applications and Releases):在Erlang/OTP中,应用(Application)是一组协同工作的进程和模块的集合,它具有明确的接口和依赖关系。每个应用都有一个回调模块,定义了启动、停止和其他生命周期...

    Erlang and OTP实战

    4. **OTP应用和监督**:在Erlang和OTP中,应用(Application)是一个组织代码和资源的单元。监督(Supervision)则是OTP的一个关键概念,它描述了进程树的组织方式和错误恢复策略。这通常是构建容错系统时不可或缺的...

    Erlang入门:构建application练习5(监督树)

    在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,这是Erlang OTP(开放电信平台)设计模式中的核心部分。 监督树是Erlang OTP设计原则的重要组成部分,它用于管理...

    Erlang入门:构建application练习2

    在本教程中,我们将深入探讨如何使用Erlang构建一个名为"Application"的基本应用程序,这在Erlang生态系统中是一个关键的概念。 在Erlang中,"Application"是一个组织代码的机制,它提供了模块之间的依赖管理和启动...

    Erlang OTP 设计原理 - 中文版

    应用(Application)在Erlang/OTP中是一个封装了代码、模块、资源文件和配置文件的实体,它可以被加载和卸载。应用的设计目的是为了封装功能相关的代码,便于管理和维护。每个应用都具有自己的启动和停止过程,以及...

    ilog-elixir工作流源代码

    这包括进程(Process)、GenServer、Supervisor和Application等组件,它们是Erlang/OTP系统中用于构建可靠分布式系统的基石。 4. **工作流引擎**:ilog-elixir的核心部分是其工作流引擎,它负责解析流程定义,调度...

    otp-win64-19.3

    3. **库和工具**:OTP包含一系列预构建的库和工具,如Mnesia(分布式数据库)、GenServer(行为模式,用于实现服务器状态管理)、Supervisor(故障恢复机制)和Application Controller(应用程序生命周期管理)等,...

    erlang 编程规范

    #### 四、Erlang/OTP框架 ##### 4.1 OTP概念 - **定义**:Open Telecom Platform,是由爱立信开发的一个中间件框架。 - **特点**:支持并发、容错和分布式的应用程序开发。 ##### 4.2 OTP库 - **Supervisor行为*...

    otp_src_22.2.tar.gz

    OTP(Open Telecommunications Platform,开放电信平台)是Ericsson公司开发的一个开源软件框架,主要用于构建可靠的、可扩展的和高效率的分布式系统,尤其在 Erlang 编程语言中广泛应用。OTP提供了一系列库和工具,...

    Erlang应用部署与热代码替换--理解2

    3. **部署到节点**:将释放包复制到目标Erlang节点的`ebin`目录下,或者使用`release_handler`模块的`add_application/2`或`install_release/1`函数进行远程部署。 4. **启动应用**:调用`application:start/1`或`...

    erlang游戏服务器网关源码.zip

    在Erlang OTP(Open Telecom Platform)框架下,`server_app`可能实现了`application`行为,负责应用程序的生命周期管理。它会定义应用的模块、版本、依赖项、以及其他配置参数,同时包含启动和停止应用的函数。 2....

    erlang高性能网络库esockd的编译和使用(二)

    Erlang OTP提供了编译和构建工具`rebar3`或`make`。如果你还没有安装,需要先安装这些工具。 3. **编译步骤**: - 进入`esockd`源代码目录。 - 使用`rebar3 compile`或`make`命令来编译源代码。这将生成`.beam`...

    erlang-consul:Consul HTTP REST API 的 Erlang 客户端库

    Erlang的OTP(开放电信平台)提供了一套标准库和框架,帮助开发者构建可靠的服务。 ### Consul概述 Consul是由HashiCorp开发的工具,它提供了以下关键功能: 1. **服务发现**:允许服务动态注册和发现其他服务,...

    partial:一个ErlangOTP解析转换,以模拟Scheme的cutcute语法

    按照的精神,这是用于部分函数应用的Erlang解析转换。 如特殊变量_ ,它允许使用cuts来创建应用了某些参数的匿名函数。 例如,创建一个使用单个整数参数转换为十六进制字符串的函数: > Hex = partial:cut...

    erlang高性能网络库esockd的编译和使用(三)

    要编译esockd,首先确保你已经安装了Erlang OTP环境。然后,从GitHub或其他源获取esockd的源代码,通常以.tar.gz或.zip的形式提供。解压后,进入项目目录,执行以下命令进行编译: ```bash $ rebar3 compile ``` `...

    RabbitMQ整合Springboot 学习包及相关安装软件

    下载并安装Erlang OTP(Open Telecom Platform)后,确保其版本与RabbitMQ兼容,通常推荐最新的稳定版本。 接着,我们下载RabbitMQ安装包。安装过程中,需要注意选择合适的操作系统版本,并根据安装向导进行配置。...

    引导程序:逐步引导Elixir应用程序(受RabbitMQ启发)

    `Application`模块是Erlang OTP(开放电信平台)的一部分,用于管理和控制Elixir应用的生命周期。 3. **启动过程**: 应用启动时,会调用`Application.start/2`函数。这个函数会读取`mix.exs`中的配置,并按照指定...

    编程elixir-1.6

    OTP是Erlang生态系统的核心部分,为Elixir提供了大量用于构建可靠系统的库和设计原则。其中的关键组件包括: - **GenServer**:一个通用服务器行为,用于实现状态管理和服务请求的回调模式。 - **GenEvent**:处理...

Global site tag (gtag.js) - Google Analytics