`
rimmyton
  • 浏览: 2201 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

创建Erlang的Application(转)

阅读更多
转载 http://www.cnblogs.com/samis/articles/1770029.html
我们写完一组功能模块后(在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入门:构建application练习2

    创建一个Erlang Application,你需要遵循以下步骤: 1. **项目结构**:一个标准的Erlang Application通常包含以下目录结构: - `ebin`:存放编译后的BEAM文件(Erlang的字节码)。 - `src`:源代码文件所在目录。...

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

    在Erlang中,"应用"(application)是组织代码的基本单元,它包含了模块、配置文件以及启动和停止应用程序的逻辑。在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,...

    Erlang入门:构建application练习4(进程link的作用)

    在Erlang编程语言中,进程是其核心特性之一,它们是并发执行的实体,类似于其他语言中的线程。在Erlang中,进程间通信(IPC)是通过消息传递来实现的,而`link`机制是这个通信模型中非常重要的一部分。本教程将通过...

    erlide (eclipse搭建erlang插件)

    4. **创建Erlang项目**: 在Eclipse中,右键点击"Package Explorer",选择"New" -> "Other" -> "Erlang" -> "Erlang Project",按照提示创建一个新的Erlang项目。 5. **编写和运行Erlang代码**: 在新建的Erlang项目...

    Erlang深度分析

    理解Erlang进程的创建、销毁和消息传递机制是掌握Erlang并发编程的关键。 ##### 4.2 网络编程 Erlang在构建网络应用方面表现出色,提供了丰富的网络编程接口,如gen_tcp、gen_udp等。同时,Erlang还支持多种网络...

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

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

    ergo:使用Golang中ErlangOTP的技术和设计模式创建网状网络的框架

    Ergo Framework实现了诸如GenServer / Supervisor / Application类的OTP设计模式,并使您能够创建与Erlang基础架构进行本地集成的高性能和可靠的应用程序 产品特点 Erlang节点(运行单节点/) (以摆脱erlang的...

    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_OTP_设计原理 中文版

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

    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 OTP 设计原理 - 中文版

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

    erlpool:基于ETS的Erlang进程的Erlang循环负载均衡器

    埃尔普 基于ETS的Erlang进程的Erlang循环负载均衡器 erlpool做什么 Erlpool是用于Erlang进程的循环负载均衡器,主要用于与数据库连接之类的事情。 与和相比, erlpool非常简单且很小(〜100 LOC)... application : ens

    erlang 编程规范

    - **Supervisor行为**:用于创建和监督进程,确保系统的高可用性。 - **Gen_server行为**:通用服务器进程,处理客户端请求。 - **其他行为**:还包括Worker、Application等。 #### 五、编码实践 根据文档内容,...

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

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

    rebar生成erlang release 并进行热代码升级

    ### 使用rebar生成Erlang Release并进行热代码升级 ...通过以上步骤,你不仅学会了如何使用rebar创建Erlang OTP项目,还掌握了如何生成release并进行热代码升级的关键技能。这对于开发和维护高可用性系统来说至关重要。

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

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

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

    在你的Erlang模块中,需要先引入esockd的模块,并创建一个socket对象。下面是一个简单的示例: ```erlang -module(myerlserver). -export([start/0]). start() -> % 初始化esockd ok = application:start(esockd...

    erlpuzzle:Erlang NIF 到 libpuzzle,一个快速查找视觉相似图像的库

    从文件( cvec_from_file/1 )创建签名的警告,您需要使用脏调度程序支持( --enable-dirty-schedulers )构建 Erlang。 application : start ( puzzle ).{ ok , Cvec } = puzzle : cvec_from_file ( " /path/...

Global site tag (gtag.js) - Google Analytics