热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ErlangApplication

整个ErlangOTP生态系认的目的就在于构建稳定、容错的系统。应用是Erlang对相关模块进行打包的一种手段。打包的目的并不在于发布,而在于使这些模块成为一个整体。有一部分OT

1.OTP应用组织模式
创建OTP应用时的主要工作集中于保准目录结构的建立和应用元数据的编写。元数据的作用在于让系统获悉应该如何启动和停止应用,还可用于指定应用的依赖项,也就是在应用启动前必须安装或启动哪些其它应用。

2.OTP应用布局
[-]

|

| - doc

| - ebin

| - include

| - priv

| - src

otp应用布局目录。目录名可以包含版本号。标准子目录包括doc、ebin、include、priv、src,其中只有ebin是必须的。

————————————————————————————————————————————————————————————

doc: 用于存放文档。如果文档时用EDoc生成,请将overview.edoc文件放在此处,其余的文件将会自动生成。

ebin:用于存放编译后的代码(.beam文件)。包含应用元数据的.app文件也应放在此处。

include:用于存放公共头文件。所有作为公共API的一部分的.hrl文件都应该放在这个目录中。仅用于你自己的代码之中且不打算公开的私有.hrl文件则应该与其它源码文件一起放 在src文件中。

priv:用于存放各种需要随应用一起发布的其他内容。定位priv目录的方法很简单:调用code:priv_dir(),便会以字符串形式得到priv目录完整路径。

src:用于存放应用源码。

3.OTP应用元数据
*.app  ->

{application, tcp_rpc,

 [{description, "RPC server for Erlang and OTP in action"},

 {vsn,"0.1.0"},

 {modules,[tr_app,

    tr_sub,

    tr_server]},

{registered,[tr_sup]},

{applications,[kenrel,stdlib]},

{mod,{tr_app,[]}}

]}

这个app文件告诉OTP如何启动应用,以及该应用如何与系统其它应用相融合。

.app文件格式很简单。除去注释,只剩下一个由句号结尾的的erlang项式:三元组{application,....,.....},其中第二个代表应用名字的原子,此处是rcp_rpc ,第三个参数是一个参数列表,其中每个参数都是由{key,value}对的形式。有些是必须的,有些是可选的。

——————————————————————————————————————————————————————————————————

description:针对应用的简短描述。

vsn:应用的版本

modules:应用中的模块列表,模块在列表中的顺序无所谓,但按照字典序对模块进行排序会较为易于维护。

registered:告诉OTP系统哪个进程注册名字,从而为系统升级等操作提供遍历,同时也可以尽早发现重复的注册名并发出警告

application:必须在该应用前先行启动的所有应用。应用往往会依赖于其它应用。主动应用要求自己所依赖的所有应用在自己的生命周期开始之前先行启动并就绪。列表中个应用的顺序无关紧要——OTP很智能,它会纵观整个系统并明辨每个应用的启动时机。

mod:告知OTP系统如何启动应用。该参数的值是一个元组,其内容为一个模块名以及一些可选的启动参数。这个模块必须实现application行为模式。

4.应用行为模式
应用行为模式的实现模块通常被命名为_app

例如:

tr_app.erl

-module(tr-app).

-behaviour(application).

-export([

start/2

stop/1

]).

start(_Type, _StartArgs) ->

    case tr_sup:start_link() of

{ok,Pid} ->

{ok,Pid};

Other ->

{error,Other}

    end.

stop(_State) ->

ok.

5.应用结构小结
1.遵循标准目录结构

2.添加用于存在元数据的app文件

3.创建一个application行为模式实现模块,负责启动应用。


Erlang Application,布布扣,bubuko.com


推荐阅读
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
author-avatar
书苑幽香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有