ejabberd moudle 开发(一)

Ejabberd模块开发
本文介绍如何开发自定义模块并整合到Ejabberd中,以满足特定需求。通过实现简单的模块,演示了基本步骤,并概述了可用的API,包括核心模块、事件钩子、IQ处理器等。
参考:
http://anders.conbere.org/journal/
http://www.process-one.net/en/wiki/ejabberd_module_development/

ejabberd的内部的很多模块都是以插件的形式工作,这样我们也可以开发自己的模块融合到ejabberd中去,完成各种各样我们独特的需求。

ejabberd定义了一个gen_mod behaviour,其要求下面的callback:

start(Host, Opts) -> ok
stop(Host) -> ok
* Host = string()
* Opts = [{Name, Value}]
* Name = Value = string()


其中Host是运行这module的一个虚拟的主机。
Opts是在配置中指定的mod的参数(后面会讲到),可以通过gen_mod:get_module_opt/4获取(参看gen_mod.erl代码得知这些信息存储在ets中)。

我们要实现一个mod非常容易,就非常容易了:
-module(my_module).
-author('your@mail.com').
-behaviour(gen_mod).
-include('ejabberd.hrl').

%% gen_mod callback
-export([start/2, stop/1]).

start(_Host, _Opt) -> ok.
stop(_Host) -> ok.


让我们在添加一代码,让我们这个“无用”的mod更加清晰一些

start(_Host, _Opt) ->
?DEBUG("EXAMPLE MODULE LOADING").

编译my_module,将my_module.beam放到你的ejabberd/ebin目录中:
mv my_module.beam /var/lib/ejabberd/ebin

接着,我们需要对ejabberd.cfg做一些配置,告诉ejabberd加载我们的my_module:
{modules,
[
{mod_register, [{access, register}]},
...
{my_module, []} % []为my_module:start/2中的第二个参数
]}.

好了,一切OK后,重新启动ejabberd,如果你的loglevel设置为5,那么你将看到如下信息:

=INFO REPORT==== 2008-07-17 15:33:27 ===
D(<0.37.0>:ejabberd_auth_my_auth:44) : EXAMPLE MODULE LOADING


我们的ejabberd module顺利加载了。
写到这里,您可能会问,如何实现一个更加强大的module呢?
原来ejabberd为我们提供了很多的API,可以供我们使用,包含如下:
ejabberd core modules (ejabberd核心模块)
ejabberd events and hooks(ejabberd 事件及钩子)
ejabberd IQ handlers
ejabberd route table (ejabberd 路由表)
ejabberd HTTP request handlers(ejabberd HTTP 请求处理)

有了这些API,我们可以实现任何我们想要的功能。
下节实现一个简单http处理模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值