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(‘[email protected]‘).
  3. -behaviour(gen_mod).
  4. -include(‘ejabberd.hrl‘).
  5. %% gen_mod callback
  6. -export([start/2, stop/1]).
  7. start(_Host, _Opt) -> ok.
  8. 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

时间: 2024-10-24 11:26:37

ejabberd模块开发的相关文章

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块

第二篇 基于微擎的模块开发—PHP

从陌生到如今能勉强完成第一个微网站模块的实现.也算是一个小小的进步,从设计数据库到,返回数据,前端模版渲染 每一点都是有点难度的.所以我想总结一下,我是如何实现一个微擎模块. 第一,首先得分析某个模块的想实现什么需求,根据需求设计合理的数据库结构. 第二,了解微擎的结构,运行流程,设计模块结构. 第三,重点就是site.php , 完成site.php 需要一定的php的编程能力, 第四,site.php 其中 通过 pdo 从数据库的获取我们想得到数据源. 微擎已封装其路由机制, doWeb

VB 核心编程及通用模块开发 笔记1

前言:学习任何编程语言.编程工具的目的不外乎解决生活问题,能够快速.高效解决问题的方式就是不错的方式,至于选择什么“工具”,众位看官看着办,本人虽然有过3年vb开发经验,但是一直没有深入学习,现已购买 <张宁著 老兵新传  核心编程及通用模块开发>,深入学习vb开发,继续将vb发扬光大. 一.知识准备 本章从API函数开始介绍vb下如何使用api函数,模块.类模块的编写.主要还是阐述的一种思想,通用模块开发,编写的模块能够通用,多次使用,尽量要降低错误,以达到重复利用目的,从通篇介绍来看,以后

服务器架设笔记——Apache模块开发基础知识

通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API.虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统.(转载请指明出于breaksoftware的csdn博客) 为了实现最基础的URL解析等功能,我把<Apache模块开发指南>一书粗略了翻看了两遍,以利于迅速了解Apache模块编程的相关知识.至于书中具体的知识点,我并不在此赘述.但是为了便于大家了解之后遇到的各种相关的知识点,我大致罗列几条(摘

Nginx Http模块开发

关于Nginx Http模块开发的文章非常少,只有Emiler的那篇关于Http模块的文章,但是那篇文章里面,并没有说到事件型的模块如何进行开发.而且文章里面提到的内容实在是让人有点意犹未尽.因此,对于Http事件型模块的开发进行了一些总结,与大家分享.但是,无论如何,要进行Nginx模块开发,最好的方法还是找到相似性较大的模块的代码进行参考,多试多看. 通常,一个Http模块均是有以下的几个部分组成: 1.模块配置结构体:(configure structure) 负责存储配置项的内容,每一条

Clover周报模块 -- 开发总结

2014年7月8日 00:16:05 一.切图 这次开发,切图花了不少时间,样式是用scss写的,第一次用,不过用着用着就发现它的强大,层级.作用域.重用等都非常的方便,还有考拉神器,用着真是爽!不过,改起样式来就蛋疼了,通过浏览器看到的是css样式,然后从css里找到它是scss的第几行,多了一层转折,不能通过浏览器直接看到scss的样式,略感麻烦. 二.布局 整个周报页面是在一张HTML页面上实现的,用Ajax请求各种数据,然后展现到页面的不同位置.因为神框架Avalon的存在,数据的处理变

Titanium Module 模块开发(二)蓝牙控制 Module

今天 ,正好项目需要添加蓝牙的控制功能,我去Titianium 文档搜了一下,发现 只有Tizen 系统有,其他的都没有,只能自己做Module. 借这个机会,记录一下蓝牙控制Module 的开发过程中遇到的问题和一些知识点. 编写Module 建立项目 首先 ,建立一个Module 项目,不会的话参考:Titanium-Modules 模块开发 (一) :模块开发基础 创建完成后会是这样: 添加蓝牙相关方法 打开BluetoothadapterModule.java 文件 可看到如下代码: 2

DNN模块开发之利器篇:七种武器

我们在进行DNN模块开发时经常需要调用Dotnetnuke.dll中的方法函数,模块开发用到DNN的方法函数会让你的开发更加得心应手,下面我们就来介绍一下. 1) PortalModuleBase 所属命名空间:DotNetNuke.Entities.Modules 这是一个开发DNN模块所必须继承的基类,标志性的基类,在此基类中,你可以得到DNN所为你封装的一些模块基本信息,毋需你多费周折,其中包括当前用户UseID,UserInfo,TabID,ModulePath,ModuleConfig

Nginx模块开发入门(转)

前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内