zoukankan      html  css  js  c++  java
  • ejabberd模块开发

    参考:
    http://anders.conbere.org/journal/
    http://www.process-one.net/en/wiki/ejabberd_module_development/

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

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

    Erlang代码 
    1. start(Host, Opts) -> ok  
    2. stop(Host) -> ok  
    3. * Host = string()  
    4. * Opts = [{Name, Value}]  
    5. * Name = Value = string()  



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

    我们要实现一个mod非常容易,就非常容易了:

    Erlang代码 
    1. -module(my_module).  
    2. -author('your@mail.com').  
    3. -behaviour(gen_mod).  
    4. -include('ejabberd.hrl').  
    5.   
    6. %% gen_mod callback  
    7. -export([start/2, stop/1]).  
    8.   
    9. start(_Host, _Opt) -> ok.  
    10. stop(_Host) -> ok.  



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

    Erlang代码 
    1. start(_Host, _Opt) ->  
    2.     ?DEBUG("EXAMPLE MODULE LOADING").  


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

    接着,我们需要对ejabberd.cfg做一些配置,告诉ejabberd加载我们的my_module:

    Erlang代码 
    1. {modules,  
    2.  [  
    3.   {mod_register, [{access, register}]},  
    4.   ...  
    5.   {my_module, []}  % []为my_module:start/2中的第二个参数  
    6.   ]}.  


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

    Erlang代码  收藏代码
    1. =INFO REPORT==== 2008-07-17 15:33:27 ===  
    2. 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处理模块

    引自:http://erlangdisplay.iteye.com/blog/315461#bc2336870

  • 相关阅读:
    rabbitMq交换机direct、topics
    rabbitMq及安装、fanout交换机-分发(发布/订阅)
    rabbitmq
    .sh文件启动 jenkins
    雪花算法、二进制运算
    收银台数据库存储AES加解密
    数据库事物
    excel技巧
    日期计算、正则、sequence、索引、表连接、mybatis
    oracle常用函数介绍
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/4200947.html
Copyright © 2011-2022 走看看