`
litaocheng
  • 浏览: 337713 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ejabberd moudle 开发(一)

阅读更多
参考:
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处理模块
分享到:
评论
6 楼 bluky999 2014-01-09  
langzhe 写道
bluky999 写道
那我们自己扩展的XMPP私有协议,比如一些IQ指令等, 也就可以通过这种插件机制来实现了 对吧?  


当然了


不错! 

希望ejabberd能成为下一个流行的XMPP Server  哈哈

不过erlang目前毕竟人才问题还有些棘手
5 楼 langzhe 2014-01-08  
bluky999 写道
那我们自己扩展的XMPP私有协议,比如一些IQ指令等, 也就可以通过这种插件机制来实现了 对吧?  


当然了
4 楼 bluky999 2014-01-08  
那我们自己扩展的XMPP私有协议,比如一些IQ指令等, 也就可以通过这种插件机制来实现了 对吧?  
3 楼 jianjianIOS 2013-09-23  

=ERROR REPORT==== 2013-09-23 16:56:41 ===
Loading of /home/linux/ejabberd-2.1.13/lib/ejabberd-2.1.13/ebin/my_module.beam failed: badfile

=ERROR REPORT==== 2013-09-23 16:56:41 ===
C(<0.37.0>:gen_mod:77) : Problem starting the module my_module for host "ubuntu"
options: []
error: undef

=ERROR REPORT==== 2013-09-23 16:56:41 ===
C(<0.37.0>:gen_mod:82) : ejabberd initialization was aborted because a module start failed.
2 楼 jianjianIOS 2013-09-23  
behaviour gen_mod undefined
1 楼 langzhe 2010-08-11  
貌似少了个-include(“jlib.hrl”);

相关推荐

    Android IM开发 Ejabberd+asmck+spack

    在Android平台上进行即时通讯(Instant Messaging,简称IM)开发是一项技术含量较高的工作,涉及到网络通信、数据加密、用户体验等多个方面。本项目“Android IM开发 Ejabberd+asmck+spack”提供了一套完整的解决...

    ejabberd源码

    ejabberd是一款强大的即时通讯服务器,它基于Jabber/XMPP协议,这使得ejabberd能够支持丰富的交互式通信功能,如文本聊天、音视频通话、群聊、文件传输等。作为一款开源软件,ejabberd遵循GPLv2许可证,允许用户自由...

    ejabberd 服务器测试客户端spark

    Spark是一款流行的XMPP客户端,由Openfire团队开发,支持多种操作系统,包括Windows、Mac OS X和Linux。它提供了直观的用户界面,使得用户可以轻松地进行即时通讯、群聊、文件传输等功能。当ejabberd服务器设置完毕...

    iOS xmpp ejabberd服务器

    ejabberd是一款开源的XMPP服务器,支持多种平台,包括iOS。它提供了强大的可扩展性和高可用性,能够处理大量的并发用户,并且支持多种安全特性,如SSL/TLS加密,确保通信的安全性。ejabberd-2.1.11-osx-installer....

    android+ejabberd

    IM(ejabberd)服务器的客户端android开发的代码详解,该代码例子包含单聊、群聊、发送文字、发送及接收文件等功能。

    ejabberd安装配置[归纳].pdf

    Ejabberd是一款流行的开源即时通讯服务器软件,具有高度灵活性和可扩展性。下面是Ejabberd安装配置的详细知识点解析: Ejabberd下载 Ejabberd的下载可以从官方网站获取,目前支持多种操作系统,包括Windows、Linux...

    ejabberd windows installer

    ejabberd是一款开源的XMPP服务器,它基于Erlang编程语言,提供高度可扩展性和高并发处理能力。在Windows环境下,ejabberd通常通过安装程序进行部署,这正是"ejabberd windows installer"所涉及的内容。Ejabberd不...

    Android使用smack连接ejabberd服务器注册、收发消息

    在Android平台上,开发即时通讯应用时,我们常常会利用XMPP(Extensible Messaging and Presence Protocol)协议来实现。本文将详细讲解如何使用Smack库连接到ejabberd服务器,并进行用户注册、登录以及收发消息的...

    ejabberd 群聊 strophe.js 实现

    ejabberd是一款开源的XMPP服务器,常用于构建实时通信系统,如即时消息(IM)、群聊等。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准,用于实现即时通信和在线状态传输。在这个场景...

    ejabberd安装配置.docx

    Ejabberd 是一个基于 XMPP 协议的 instant messaging 服务器,主要用于实时通信和即时消息传递。下面是 Ejabberd 安装配置的相关知识点: 一、Ejabberd 下载 Ejabberd 的安装需要从官方网站下载对应的安装包。下载...

    ejabberd-14.07聊天服务器

    2. **高可用性与扩展性**:ejabberd采用了 Erlang/OTP(Open Telecom Platform)语言开发,天生具备高并发和容错能力。它可以轻松地在集群环境中运行,随着用户数量的增长,可以动态添加节点来扩展服务。 3. **安全...

    Ejabberd-2.1.10-mac

    Ejabberd是一款高度可扩展、安全且可靠的即时通讯服务器软件,主要基于XMPP协议。在标题"Ejabberd-2.1.10-mac"中,我们可以推断这是一份针对Mac平台的Ejabberd服务器软件的特定版本,即2.1.10。这个版本可能包含了...

    ejabberd的安装包

    ejabberd安装包,很好的工具!适合安装!一定会很好用的!

    ejabberd-15.07-osx-installer.app.zip

    ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...

    ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议

    ejabberd是一款开源的XMPP服务器,广泛用于构建实时通信系统。在ejabberd中,`mod_privacy_odbc.erl`是用于处理用户隐私列表模块的一部分,该模块与数据库(通常通过ODBC接口)交互来存储和管理用户的隐私设置。然而...

    SSM框架Demo并包含扫码上传,ejabberd消息推送

    SSM框架,全称为Spring、SpringMVC和MyBatis的集成框架,是Java Web开发中常用的一种技术栈。这个框架结合了Spring的核心IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)...

    ejabberd-2.1.11

    windows环境下的ejabberd。。。点击即可安装

    xmljava系统源码-ejabberd:即时通讯的后端服务器。它是从ejabberd开发和定制的

    开发的,根据业务需要改造而来。修改和扩展了很多 ejaberd 不支持的功能。 关键功能 分布式:去掉了依赖 mnesia 集群的代码,来支持更大的集群,以及防止由于网络分区导致的集群状态不一致。 消息处理:通过ejabberd...

    ejabberd_rest_client:面向ejabberd的REST客户端

    总结来说,ejabberd_rest_client是ejabberd服务器的重要补充工具,它简化了开发者与ejabberd服务器之间的交互,使得基于Ruby的XMPP应用开发变得更加便捷高效。通过这个库,你可以轻松地进行用户管理、聊天室控制、...

    ejabberd服务器安装及客户端注册文档

    在进行IT项目管理时,特别是涉及到服务器安装和客户端注册的场景,ejabberd是一个非常重要的开源即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,这个协议是国际开放标准用于即时...

Global site tag (gtag.js) - Google Analytics