erlang杂记八---使用otp框架启动应用
2013-06-25 09:03
211 查看
续:这两天重新读<erlang/otp并发编程实战>,终于把之前头晕的一点东西看懂了。。
一.应用的组织形式
经典的组织形式:应用名+ 版本号下有:doc,ebin,include,priv,src。应用名+版本号的形式是为了管理方便->代码升级。
二.元数据
应用元数据文件用来告诉otp如何启动应用,以及该应用应该如何与系统中的其他应用相融合。主要的描述参数包括:description, vsn, modules, registered, application, mod.
通用配置信息不要写在这个配置文件中,而应该放到正规的配置文件中。
三.应用行为模式
每个主动应用都配有一个application行为模式的实现模块。该模块用于实现系统启动逻辑。它至少负责根监督者的启动,该监督者将成为应用中其他所有应用的鼻祖。
需要实现的内容应该有start和stop
其中start内可以添加其他需要启动的内容,如启动ets
四.应用监督者
监督者负责启动otp应用进程,并负责在必要时重启进程。
监督者实现需要实现的内容有start_link和init
start_link是由元数据设置的启动入口,该入口会调用supervisor的start_link回调。
init设置初始化子进程的方式。RestartStrategy为重启策略。Server是启动的子进程的方法,中间的元组描述了启动调用的MFA。permannent表示需要重启,worker表示启动的是一个worker,而不是另一个supervisor,最后列出的是该进程所依赖的模块,仅用于代码热升级时告知系统升级顺序。
五.server应用
gen_server主要实现了很多回调,编写应用的时候,把每个消息都按照实际需求分别实现一个handle_call或者handle_cast就可以了。
code_change如果需要实现代码热升级的话,使用M:F,不要直接使用F,指定了M,当代码更新之后,F也会对应更新,否则F仍然是原来的F。
六.对外api
对外api将实现的内部细节屏蔽起来。使用逻辑调用实现过的方法就可以了。注意写保护增强容错~
一.应用的组织形式
经典的组织形式:应用名+ 版本号下有:doc,ebin,include,priv,src。应用名+版本号的形式是为了管理方便->代码升级。
二.元数据
应用元数据文件用来告诉otp如何启动应用,以及该应用应该如何与系统中的其他应用相融合。主要的描述参数包括:description, vsn, modules, registered, application, mod.
通用配置信息不要写在这个配置文件中,而应该放到正规的配置文件中。
三.应用行为模式
每个主动应用都配有一个application行为模式的实现模块。该模块用于实现系统启动逻辑。它至少负责根监督者的启动,该监督者将成为应用中其他所有应用的鼻祖。
需要实现的内容应该有start和stop
start(_Type, _StartArgs) -> cast xx_sup:start_link() of {ok, pid} -> {ok, pid}; Other -> {error, Other} end. stop(_State) -> ok.
其中start内可以添加其他需要启动的内容,如启动ets
四.应用监督者
监督者负责启动otp应用进程,并负责在必要时重启进程。
监督者实现需要实现的内容有start_link和init
start_link()-> supervisor:start_link({local, ?SERVER}, ?MODULE, []). init([]) -> Server = {xx_server, {xx_server, start_link, []}, permanent, 2000, worker, [xx_server]}, Children = [Server], RestartStratety = {one_for_one, 0,1}, {ok, {RestartStrategy, Children}}.
start_link是由元数据设置的启动入口,该入口会调用supervisor的start_link回调。
init设置初始化子进程的方式。RestartStrategy为重启策略。Server是启动的子进程的方法,中间的元组描述了启动调用的MFA。permannent表示需要重启,worker表示启动的是一个worker,而不是另一个supervisor,最后列出的是该进程所依赖的模块,仅用于代码热升级时告知系统升级顺序。
五.server应用
gen_server主要实现了很多回调,编写应用的时候,把每个消息都按照实际需求分别实现一个handle_call或者handle_cast就可以了。
code_change如果需要实现代码热升级的话,使用M:F,不要直接使用F,指定了M,当代码更新之后,F也会对应更新,否则F仍然是原来的F。
六.对外api
对外api将实现的内部细节屏蔽起来。使用逻辑调用实现过的方法就可以了。注意写保护增强容错~
相关文章推荐
- 使用Ubuntu OS上的URL dispatcher来启动其它的应用
- 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- 使用Docker分分钟启动常用应用和镜像下载慢或者下载不下来的问题
- 使用 Spring Boot 快速构建 Spring 框架应用
- Swift : 在VoIP应用中接入iOS10中的CallKit框架--即接听电话使用系统原生界面
- 分析Android应用使用的技术框架和开源库
- 使用CodeIgniter框架快速开发PHP应用(一)
- 使用spring框架,应用启动时,加载数据
- 使用 CodeIgniter 框架快速开发 PHP 应用(三)
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
- bboss persistent 框架连接池监控接口和应用内存使用情况监控介绍
- HP T520 和 T620 灵动系列瘦客户机电脑 - 在 Kiosk 模式下,使用 HP Easy Shell 后,应用无法启动
- Android使用URI启动应用的学习
- Android开源框架Glide的使用-示例应用
- 使用 Spring Boot 快速构建 Spring 框架应用--转
- 分享使用AngularJS创建应用的5个框架
- Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)
- 使用express.js框架一步步实现基本应用以及构建可扩展的web应用