`
hje
  • 浏览: 288147 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erlang application 概述(转)

阅读更多
我们写完一组功能模块后(在erlang中,以module为单位),总是希望这一组模块,可以打包成一个应用,作为一个单独的整个,可以启动,停止,象mnesia一样。并可以在其它应用中引用。如何来做到这一点呢。每一个应用都是通过application:start系列函数来启动,application:stop可以停止一个应用。

一个应用需要一个.app文件来描述,主要描述它包括哪些文件,参数等。



如果在启动erlang的VM时就启动一个应用呢,实际上,我们是没有办法通过VM的参数来直接启动一个自定义应用,有些参数如:start_sasl可以启动一些内部的标准的build-in应用,但是我们可以给VM一个执行入口,这就象C语言或是java语言的main函数一样,VM启动时,执行这个程序的入口点,这样就可以在这个入口中执行启动应用的操作。

这个入口点通过参数-s 来指定。下面我们来看一个例子:


1. erl -s erlycomet_demo
这个参数指定,VM启动后,调用erlycomet_demo:start()无参函数

2. 在erlycomet_demo:start()函数中,我们写如下代码:
application:start(erlycomet_demo).

上面这句话,启动一个erlycomet_demo的应用,这里,VM就会在搜索目录中找到erlycomet_demo.app这个文件,如果不到,报错,如果找到,则按这个文件中的指示,启动erlycomet_demo应用。这一部分可以参看相关的文档,简单的,在erlycomet_demo中一搬有一个参数{mod,{mod_name_app,[]}}
这个参数指示,调用mod_name_app:start(_type,Argu)这个函数。以erlycomet_demo为例,这个调用进入到erlycomet_demo_app:start(_type,Argu)中,


3. 在erlycomet_demo_app的start(_type,Argu)中,启动 一个supervisor进程,进而启动子进程。如下所示:
erlycomet_demo_sup:start_link(Args).



了解了,我们是通过application为单位来打包应用的,那么我们如何才能共用应用呢??比如,我们如何在应用A中使用应用2的功能呢??答应是:以应用为单位来进行引用,例如:我们要便用mnesia功能,我就就调用mnesia:start()或是在应用A的application中指定,要启动mnesia。 在OPT中,有很多应用都是相互独立,而又相互引用的。比如:mnesia, crpyto,inet 等。

 

分享到:
评论

相关推荐

    Erlang Debugger

    #### 一、概述 **Erlang Debugger** 是一个图形化工具,用于调试和测试 Erlang 程序。它允许用户设置断点、单步执行代码以及查看和修改变量值等功能。本文将详细介绍 Debugger 的主要功能及其使用方法。 #### 二、...

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

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

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

    1> application:start(erlang_consul). ok 2> consul_client:get("/v1/kv/datakey", []). {ok, {200, [], Value}} ``` ### 应用场景 `erlang-consul` 在以下场景中特别有用: 1. **微服务架构**:在分布式系统中...

    erlang_v8_lib:一个小包装器,围绕erlang-v8创建一个迷你框架

    erlang_v8_lib 建立在erlang_v8之上的自以为是JavaScript框架。 erlang_v8_lib是一个... 1> application:ensure_all_started(erlang_v8_lib). {ok, [...]} 2> erlang_v8_lib_sup:start_link(). {ok,<0>} 3> erlang

    erlang 编程规范

    #### 一、概述 在Erlang编程中,遵循一套合理的编程规范至关重要。本文档旨在介绍《使用Erlang进行程序开发——编程规则与约定》中的一些关键点,帮助读者更好地理解和应用这些规范。文档不仅涵盖了Erlang的基本...

    geas:Guess Erlang应用程序散布

    例如,如果依赖项使用application:ensure_all_started/1则只能从R16B02开始使用您的项目,或者从17.0开始使用maps 。 相反,在17.5之后不能使用pg模块,而在23.0之后又可以使用pg模块。 有关更多详细信息,请参见 ...

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

    1. **启动esockd应用**:在Erlang shell中,首先需要启动`esockd`应用,使用`application:start(esockd)`命令。 2. **创建套接字**:使用`esockd:connect/3`函数创建一个到指定主机和端口的连接。例如,连接到...

    erly:由 OTP 和 Mnesia 支持的 URL 缩短服务

    概述 Erly由 OTP 和 Mnesia 支持的 URL 缩短服务。 如何编译: 您要做的第一件事是使用rebar编译所有 Erlang 文件。 $ ./rebar get-deps compile 如何与钢筋一起使用: 您可以在 rebar.config 中使用 erly 作为...

    n2o_skeleton:基于http的N2O应用骨架

    **一、N2O框架概述** N2O框架的核心设计目标是提供轻量级、高性能的Web服务。它结合了Erlang的并发优势和现代Web开发的需求,使得开发者能够构建高度可扩展、容错性强的Web应用。N2O的核心组件包括: 1. **HTTP...

    TUXEDO 教程 Word文档(评论后还分,包括星级评论)

    **TUXEDO 教程概述** TUXEDO(Transaction Processing Facility for Unix, Extended Edition)是由BEA Systems(现在是Oracle的一部分)开发的一种分布式事务处理系统,它为应用程序提供了高性能、高可用性和可伸缩...

    porcelain:像老板一样处理外部流程

    概述 Erlang端口API有20种奇怪的选项,使用起来很麻烦而且麻烦。 瓷器用一种更简单的方法代替了它,并为常见情况提供了默认值。 用户级别的功能包括: 理智的API 能够以同步或异步方式启动外部程序 通过多种方式...

Global site tag (gtag.js) - Google Analytics