目录结构

│  Emakefile
│ make.bat
│ start.bat
├─config
│ config.config
│ server.app
├─ebin
│ wulin_app.beam
│ wulin_sup.beam
│ util.beam
│ demo.beam
├─logs
│ debug.log
└─src
wulin_app.erl
wulin_sup.erl
util.erl
demo.erl

config 配置目录

ebin 编译输出目录

logs 日志输出目录

src 源代码目录

Emakefile(编译配置)

{["src/*"],[{outdir, "ebin"}]}.

src/* 表示编译src目录下所有的源代码文件

outdir 指定编译后的beam文件输出目录

make.bat(编译命令)

erl -make all

start.bat(启动app)

cd config
erl -name wulin@192.168.1.1 -setcookie mywulin -boot start_sasl -noshell -config config -pa ../ebin/ -s wulin_app start

-noshell 禁止输入

-config xxx 加载文件名为xxx.config的配置

-pa 指定目录

-s xxx yyy 启动xxx模块的yyy函数

config.config(env变量)

[
{
sasl,
[
{sasl_error_logger, false},
{errlog_type, error},
{error_logger_mf_dir, "../logs"},
{error_logger_mf_maxbytes, 1048760},
{error_logger_mf_maxfiles, 10}
]
},{
ab,
[]
}
].

可以在程序内使用application:get_env/2获取这里定义的变量

示例:application:get_env(sasl, error_logger_mf_dir). 返回{ok,"../logs"}

server.app

{
application, server % 对应文件名
, [{description, "Server"}
, {vsn, '1.0a'}
, {modules, []}
, {registered, []}
, {applications, [kernel, stdlib, sasl]} % 依赖库
, {env, [{author, "demo"}]}
, {mod, {wulin_app, [12321]}} % 依赖模块,主模块
, {start_phases, []}]
}.

server(app名)必须和server.app(文件名)一致

wulin_app.erl

-module(wulin_app).
-behaviour(application).
-export([start/2,start/0, stop/1]). start() ->
application:start(server). start(_Type, [A]) ->
util:debug("Server Starting.... ~p ~n", [A]),
util:debug("Server Starting.... ~n", []),
{ok, Pid} = wulin_sup:start_link(),
util:debug("Server Started in ~p ~n", [Pid]),
{ok, Pid}. stop(_State) ->
io:format("Server Stoped..... ~n").

application:start(server)中的server对应server.app中的server

wulin_sup.erl

-module(wulin_sup).
-behaviour(supervisor). -export([start_link/0,init/1]). start_link() ->
supervisor:start_link({local,?MODULE}, ?MODULE, []). init([]) ->
{ok, {{one_for_one, 3, 10},[
{demo, {demo, start, []}, permanent, 10000, worker, []}
]}}.

demo.erl

-module(demo).

-export([start/0]).

start() ->
util:debug("xxxxx ~n", []),
{'ok', self()}.

util.erl

-module(util).
-export([debug/2]). debug(F, Args) ->
{ok, LogPath} = application:get_env(sasl, error_logger_mf_dir),
File = LogPath ++ "/debug.txt",
{ok, Steam} = file:open(File, [write, append]),
io:format(Steam, F, Args),
file:close(Steam).

debug.log

Server Starting.... 12321
Server Starting....
xxxxx
Server Started in <0.49.0>

流程

start.bat -> wulin_app:start/0 -> server.app ->

wulin_app:start/2 -> wulin_sup:start_link/0 -> demo:start/0

最新文章

  1. mybatis_开发篇
  2. 带你玩转Visual Studio
  3. java中一个查询业务的流程
  4. 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素
  5. CICS中设置程序常驻内存
  6. JMeter入门(4):Java Request实例
  7. 13. vs2010 ClientID bug处理
  8. storm接入metaq时类不兼容错误 无法初始化MonitorLog
  9. linux&nbsp;下&nbsp;apache启动、停止、重启命令
  10. Leetcode 175. Combine Two Tables
  11. asp.net mvc源码分析-Route的GetRouteData
  12. 云游戏学习与实践(二)——安装GamingAnywhere
  13. 使用layui在规定的期限内选择日期
  14. React学习笔记(一)- 环境搭建
  15. laravel整合workerman做聊天室
  16. blockchain[z]
  17. YII框架的使用
  18. 跨域(五)——postMessage
  19. java操作特殊字符需要注意的点
  20. 微软职位内部推荐-Software Engineer-Sharepoint

热门文章

  1. c# Winform 多线程操作
  2. Python 变量作用域 LEGB (下)—— Enclosing function locals
  3. 标准 IO fread 与 fwrite 的使用(可以实现二进制流的读写)
  4. elasticsearch 父子文档(十一)
  5. GitHub排名TOP30的机器学习开源项目
  6. vue之axios的使用
  7. windows 计算器
  8. js中变量对象和活动对象的区别 闭包时的区别
  9. 【重磅来袭】阿里小程序IDE上线8大功能
  10. C++——函数模板和类模板