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

ejabberd moudle 开发 - http modules(二)

阅读更多
继续上一部分,我们已经可以开发一个简单的ejabberd module了,这次让我们开发一个简单的http处理模块。这个http模块可以输出服务器中登录的用户列表(json格式)。

首先,再我们上节的my_module中添加一个process/2导出函数:

-module(mod_http_hello_world).
-author('your@mail.com').
-vsn('1.0').

-define(EJABBERD_DEBUG, true).

-behavior(gen_mod).

-export([
    start/2,
    stop/1,
    process/2
    ]).

-include("ejabberd.hrl").
-include("jlib.hrl").
-include("ejabberd_http.hrl").

start(_Host, _Opts) ->
    ok.

stop(_Host) ->
    ok.

process(_Path, _Request) ->
    "Hello World".


process/2用来处理ejabberd http服务器中的请求,其中第一个参数Path表示url中的路径,比如
http://example.com/this/cool/article 这个URL如果要我们的模块处理,对应的Path为:["this", "cool", "article"],对了,就是路径拆分后的一个list。这里我们先不对路径做任何处理,匹配,我们首先验证我的http handler module是否可以工作。

老规矩,编译module,然后放到ejabbered的ebin目录:

mv mod_http_hello_world.beam /var/lib/ejabberd/ebin

配置ejabberd.cfg,添加我们的module

{modules,
 [
  {mod_register, [{access, register}]},
  …
  {mod_http_hello_world, []}  % []mod_http_hello_world:start/2中的第二个参数
  ]}.


到这里步骤和jabberd moudle 开发(一)中,基本相似,可是我们要让我们的module处理http请求,那么我们需要继续下面的配置,打开ejabberd.cfg,找到:

{5280, ejabberd_http, [http_poll, web_admin]}


修改如下:
{5280, ejabberd_http, [http_poll, web_admin,
{request_handlers, [{["hello_world"], mod_http_hello_world}
]}]}


好了,重启ejabberd,在浏览器中输入:
http://example.com:5280/hello_world
页面会显示Hello World,一切正常。

我们开头说过我们的http module要把当前服务器中所有登录的用户打印出来。让我们修改一下process/2函数:

process(_Path, _Request) ->
    [Username ++ "@" ++ Server || {Username, Server} <- ejabberd_auth:dirty_get_registered_users()].


我们通过ejabberd_auth:dirty_get_registered_users/0获取用户列表,随后显示出来。
_Request包含请求的方法,路径,参数,post数据,认证的信息,可以更好的处理HTTP 请求。

最后说明一下我们这个modoule是如何被ejabberd执行的,毫无疑问,通过我们对ejabberd_http部分的配置,ejabber 加载了新的http 处理模块,在其ejabberd_http.erl中,当收到http请求时,其遍历所有的http module,找到Path匹配的Moudle,然后执行Module:process/2函数,从而做到http 请求的分发。如果没有找到合适的handler,那么将调用ejabberd_web:error(not_found)。

下节我们开发一个XMPP 机器人模块。
分享到:
评论
1 楼 supercode 2009-12-07  
前两个写的,前端用ror,后台用erlang,采用rfc4627编码,在linux下正常的,这两天拿到windows上,居然返回乱码了,在erl测试又像是正常。困惑

相关推荐

    ejabberd-15.07-osx-installer.app.zip

    ejabberd-15.07-osx-installer.app.zip是一个针对Mac OS X平台的ejabberd安装包,用于在苹果操作系统上部署ejabberd服务器。 首先,我们需要理解XMPP(Extensible Messaging and Presence Protocol)协议,它是...

    Ejabberd-2.1.10-mac

    在标题"Ejabberd-2.1.10-mac"中,我们可以推断这是一份针对Mac平台的Ejabberd服务器软件的特定版本,即2.1.10。这个版本可能包含了针对Mac OS X系统的优化和适配,使得在苹果电脑上部署和运行Ejabberd变得更加便捷。...

    ejabberd-16.02-linux-x86_64-installer.run

    ejabberd-16.02-linux-x86_64-installer.run实时聊天,运行在linux系统下,可直接安装使用版本为ejabberd-16.02

    ejabberd windows installer

    在"ejabberd windows installer"中,文件"ejabberd-2.1.10-windows-installer.exe"是ejabberd的一个特定版本(2.1.10)的Windows安装程序。这个安装程序会引导用户完成ejabberd的配置过程,包括选择安装路径、设置...

    ejabberd-1.1.3_1-windows-installer.exe

    点击即可安装。。。一路next下去

    ejabberd-mod-mam:使用MongoDB后端的ejabberd的消息存档管理(XEP-0313)

    埃雅伯德莫姆ejabberd-mod-mam是ejabberd XMPP服务器的模块,该模块使用后端实现“消息存档管理”功能 。 该模块针对ejabberd的所谓“社区版”,可以在github上ejabberd的当前分支上找到。 ejabberd-mod-mam正在进行...

    ejabberd-2.1.11

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

    Ejabberd-Packet-Interceptor:拦截和更改消息的 Ejabberd 模块

    Ejabberd-Packet-Interceptor 拦截和更改消息的 Ejabberd 模块这个模块接受一个 Ejabberd 消息包,改变消息体并发送它。 该模块挂钩 packet_filter 并检查每个数据包是否有消息正文。 如果有消息正文,它会对其进行 ...

    ejabberd-load-test

    在这个名为"ejabberd-load-test"的项目中,我们将探讨如何使用JavaScript进行ejabberd的负载测试。 在ejabberd负载测试中,主要关注以下几个关键知识点: 1. **XMPP协议**:ejabberd基于XMPP(Extensible ...

    ejabberd:ejabberd-XMPP和Web聊天

    ejabberd-XMPP和Web聊天 将与结合在一起的即时消息服务器,以创建支持强加密并与任何Web浏览器或专用XMPP客户端(例如,Pidgin)一起使用的实时聊天服务器。 ejabberd是功能强大的XMPP服务器,它支持群集,实时升级...

    ejabberd-module-guide:创建模块的指南

    ejabberd 模块的权威指南从编写 ejabberd 模块开始对我来说真的很痛苦。 周围没有太多文档,大多数文章/博客文章已经过时。 本指南应涵盖从头开始创建 ejabberd 模块,并且没有或几乎没有编写 erlang 的经验。 但是...

    ejabberd-stanza-ack:ejabberd 13.xx的ejabberd节确认模块

    ejabberd stan ack v0.6 当ejabberd服务器已收到您的消息时,此模块将向您的发件人发送确认/确认消息,而当邮件的收件人已收到您的消息时,此模块将发送另一条确认/确认消息。 在这方面,它提供与移动聊天应用程序...

    iOS xmpp ejabberd服务器

    ejabberd-2.1.11-osx-installer.app是ejabberd服务器的Mac OS X安装程序,用于在Apple设备上部署和运行服务器。 在iOS应用中集成XMPP和ejabberd服务器,首先需要了解XMPP的基本概念。XMPP基于XML,通过实时传输协议...

    ejabberd-14.07聊天服务器

    在"ejabberd-14.07.app"这个文件中,我们可以预期这是一个ejabberd服务器的特定版本应用包,可能包含了ejabberd的源代码、配置文件、安装脚本以及必要的文档。安装和配置ejabberd通常涉及以下几个步骤: 1. **下载...

    ejabberd-contrib:日益壮大的ejabberd捐款存储库-PR或要求加入!

    此路径是~/.ejabberd-modules或由ejabberdctl.cfg的CONTRIB_MODULES_PATH设置定义。 编辑已安装模块的conf目录中提供的配置文件,并根据需要进行更新。 然后将更改应用于您的主要ejabberd配置。 在将来的版本中,...

    docker-ejabberd:用于Ejabberd服务器的Dockerfile

    从版本16.12开始,ejabberd根据源树中包含的该容器的工作情况拥有自己的docker容器。 在此博客文章中查看更多内容。 我们可以期望将来对此进行更多的工作。 版本 当前版本: 21.01 Docker标记名称基于git分支和...

    Android IM开发 Ejabberd+asmck+spack

    本项目“Android IM开发 Ejabberd+asmck+spack”提供了一套完整的解决方案,包括服务器端、Android客户端以及PC端客户端。 **Ejabberd服务器** Ejabberd是一款开源的XMPP(Extensible Messaging and Presence ...

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

    **二、连接ejabberd服务器** 连接ejabberd服务器需要创建XMPPTCPConnection对象。以下代码展示了如何建立连接: ```java XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .set...

    ejabberd源码

    在ejabberd-15.02这个版本中,可能包含了以下组件和功能: - **核心组件**:如服务器核心、路由引擎、认证模块、存储模块等。 - **安全与隐私**:支持TLS/SSL加密,提供端到端的加密聊天选项,保护用户数据的安全。...

    android+ejabberd

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

Global site tag (gtag.js) - Google Analytics