- Erlang/OTP 应用的目录布局:
- doc
用于存放文档。如果文档是用 EDoc 生成的,将 overview.edoc 文件放在这里,其余文件会自动生成。 - ebin
用于存放编译后的代码。含有应用元数据的 .app 文件也应存放在此处。 - include
用于存放公共头文件。 - priv
用于存放各种需要随应用一起发布的其他内容。包括但不限于模板文件、共享对象文件、DLL 等。
code:priv_dir(<application-name>) 会返回 priv 目录的完整路径。 - src
- doc
- 构建应用:
tcp_rpc.app{application, tcp_rpc, [ {description, "RPC server for Erlang and OTP in action"}, {vsn, "0.1.0"}, {modules, [ tr_app, tr_sup, tr_server]}, {registered, [tr_sup]}, {applications, [kernel, stdlib]}, {mod, {tr_app, []}} ] }.
tr_app.erl
-module(tr_app). -behaviour(application). %% API -export([ start/2, stop/1]). start(_Type, _StartArgs) -> case tr_sup:start_link() of {ok, Pid} -> {ok, Pid}; Other -> {error, Other} end. %% Type: normal | failover | takeover %% StartArgs: .app 文件中传给 mod 的参数 stop(_State) -> ok.
tr_sup.erl
-module(tr_sup). -behaviour(supervisor). %% API -export([start_link/0]). -export([init/1]). -define(SERVER, ?MODULE). start_link() -> supervisor:start_link({local, ?SERVER}, ?MODULE, []). init([]) -> Server = {tr_server, {tr_server, start_link, []}, permanent, 2000, worker, [tr_server]}, Children = [Server], RestartStrategy = {one_for_one, 0, 1}, {ok, {RestartStrategy, Children}}. %% 重启策略:{xx, Max, Within} 单位:秒 %% one_for_one:如果一个子进程终止,仅该进程被重启 %% one_for_all:如果一个子进程终止,所有子进程被重启 %% rest_for_one:如果一个子进程终止,在启动顺序上后面的子进程被重启 %% simple_one_for_one:监督者只能启动一种子进程,但却可以启动任意多个。 %% 所有子进程都是运行时动态添加的,监督者本身在启动时不会启动任何子进程。 %% 子进程规范:{ID, Start, Restart, Shutdown, Type, Modules} %% Restart:permanent | temporary | transient(仅在进程意外终止时重启进程) %% Shutdown: %% 软关闭策略,单位:毫秒 %% brutal_kill %% infinity:主要用于子进程本身也同为监督者的情况,表示应给予子进程充分的时间自行退出 %% 添加子进程 %% supervisor:start_child(Sup, ChildSpec) %% 如果督程死了,并被重建了,所有动态添加的子进程会丢失 %% 停止子进程 %% supervisor:terminate_child(Sup, Id). %% 删除子进程 %% supervisor:delete_child(Sup, Id).
-
启动应用:
erlc -o ebin src/*.erl erl -pa ebin werl -pa ebin(windows) application:start(tcp_rpc).
-
生成 EDoc 文档:
edoc:application(tcp_rpc, ".", []).
《Erlang/OTP并发编程实战》第四章 OTP 应用与监督机制
猜你喜欢
转载自blog.csdn.net/sanmao123456_/article/details/103420173
今日推荐
周排行