首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

ejabberd分析(3)启动流程

2012-07-02 
ejabberd分析(三)启动流程ejabberd的启动从ejabberd:start() 开始。?application:start(ejabberd).applicat

ejabberd分析(三)启动流程

ejabberd的启动从ejabberd:start() 开始。

?


application用来表示一个可以单独启动和停止、并被复用的程序单元。通常一个application都有一个同名的app文件来定义。

?

对于系统工具(systool)直接调用的app文件必须包含以下几项:

{application, ejabberd,[{description, "ejabberd"}, {vsn, "2.1.7"}, {modules, [acl, ...... {registered, [ejabberd, ...... {applications, [kernel, stdlib]}, {env, []}, {mod, {ejabberd_app, []}}]}.
最后一项:mod 定义了应用程序的回调模块和启动参数。 在应用程序启动时会由主导进程来调用这个模块的start/2方法。

?

ejabberd_app.erl 中的start/2 :

?

我们可以看到它调用了一系列的方法和函数来完成整个应用的启动。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

这里的ejabberd_command类似于java中的虚方法,这个ejabberd_command 具有指定的名称、指定类型数量参数、指定类型返回值。

?

例如:

#ejabberd_commands{name = register, tags = [accounts],
desc = "Register a user",
module = ?MODULE, function = register,
args = [{user, string}, {host, string}, {password, string}],
result = {res, restuple}},

定义了一个名为register,接受[{user, string}, {host, string}, {password, string}] 参数,返回{res, restuple}的虚方法。

?

?

?

?

?

?

?

?

?

?

?

详细看下这个supervisior 的init()定义:

?

重启策略为one_for_one(只重启终止的子进程自身),如果1s内重启次数超过10则终止所有子进程和自身。列表中为子进程的定义。以Hooks为例子:

?

子进程定义的格式为:{Id, StartFunc, Restart, Shutdown, Type, Modules}

?

id: 分配的ID

StartFunc: 启动子进程时调用的方法

Restart: 重启子进程时调用的方法

Shutdown: 关闭子进程时调用的方法

Type: 子进程的类型,(supervisior or worker)

Modules: 回调模块

可以看到这里启动了不少的子进程,从名字上大体上可以看出各个子进程的功能。





?

?

?

?

热点排行