转载 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,你需要遵循以下步骤: 1. **项目结构**:一个标准的Erlang Application通常包含以下目录结构: - `ebin`:存放编译后的BEAM文件(Erlang的字节码)。 - `src`:源代码文件所在目录。...
在Erlang中,"应用"(application)是组织代码的基本单元,它包含了模块、配置文件以及启动和停止应用程序的逻辑。在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,...
在Erlang编程语言中,进程是其核心特性之一,它们是并发执行的实体,类似于其他语言中的线程。在Erlang中,进程间通信(IPC)是通过消息传递来实现的,而`link`机制是这个通信模型中非常重要的一部分。本教程将通过...
4. **创建Erlang项目**: 在Eclipse中,右键点击"Package Explorer",选择"New" -> "Other" -> "Erlang" -> "Erlang Project",按照提示创建一个新的Erlang项目。 5. **编写和运行Erlang代码**: 在新建的Erlang项目...
理解Erlang进程的创建、销毁和消息传递机制是掌握Erlang并发编程的关键。 ##### 4.2 网络编程 Erlang在构建网络应用方面表现出色,提供了丰富的网络编程接口,如gen_tcp、gen_udp等。同时,Erlang还支持多种网络...
3. **部署到节点**:将释放包复制到目标Erlang节点的`ebin`目录下,或者使用`release_handler`模块的`add_application/2`或`install_release/1`函数进行远程部署。 4. **启动应用**:调用`application:start/1`或`...
Ergo Framework实现了诸如GenServer / Supervisor / Application类的OTP设计模式,并使您能够创建与Erlang基础架构进行本地集成的高性能和可靠的应用程序 产品特点 Erlang节点(运行单节点/) (以摆脱erlang的...
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
3. 应用和发布(Applications and Releases):在Erlang/OTP中,应用(Application)是一组协同工作的进程和模块的集合,它具有明确的接口和依赖关系。每个应用都有一个回调模块,定义了启动、停止和其他生命周期...
1> application:start(erlang_consul). ok 2> consul_client:get("/v1/kv/datakey", []). {ok, {200, [], Value}} ``` ### 应用场景 `erlang-consul` 在以下场景中特别有用: 1. **微服务架构**:在分布式系统中...
应用(Application)在Erlang/OTP中是一个封装了代码、模块、资源文件和配置文件的实体,它可以被加载和卸载。应用的设计目的是为了封装功能相关的代码,便于管理和维护。每个应用都具有自己的启动和停止过程,以及...
埃尔普 基于ETS的Erlang进程的Erlang循环负载均衡器 erlpool做什么 Erlpool是用于Erlang进程的循环负载均衡器,主要用于与数据库连接之类的事情。 与和相比, erlpool非常简单且很小(〜100 LOC)... application : ens
- **Supervisor行为**:用于创建和监督进程,确保系统的高可用性。 - **Gen_server行为**:通用服务器进程,处理客户端请求。 - **其他行为**:还包括Worker、Application等。 #### 五、编码实践 根据文档内容,...
1. **启动esockd应用**:在Erlang shell中,首先需要启动`esockd`应用,使用`application:start(esockd)`命令。 2. **创建套接字**:使用`esockd:connect/3`函数创建一个到指定主机和端口的连接。例如,连接到...
### 使用rebar生成Erlang Release并进行热代码升级 ...通过以上步骤,你不仅学会了如何使用rebar创建Erlang OTP项目,还掌握了如何生成release并进行热代码升级的关键技能。这对于开发和维护高可用性系统来说至关重要。
按照的精神,这是用于部分函数应用的Erlang解析转换。 如特殊变量_ ,它允许使用cuts来创建应用了某些参数的匿名函数。 例如,创建一个使用单个整数参数转换为十六进制字符串的函数: > Hex = partial:cut...
在你的Erlang模块中,需要先引入esockd的模块,并创建一个socket对象。下面是一个简单的示例: ```erlang -module(myerlserver). -export([start/0]). start() -> % 初始化esockd ok = application:start(esockd...
从文件( cvec_from_file/1 )创建签名的警告,您需要使用脏调度程序支持( --enable-dirty-schedulers )构建 Erlang。 application : start ( puzzle ).{ ok , Cvec } = puzzle : cvec_from_file ( " /path/...