`
litaocheng
  • 浏览: 333909 次
  • 性别: 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-16.02-linux-x86_64-installer.run

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

    Ejabberd-2.1.10-mac

    便捷的服务器架构工具。只需一键安装,非常好用!

    ejabberd-1.1.3_1-windows-installer.exe

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

    ejabberd-15.07-osx-installer.app.zip

    使用xmpp做一些简单的xmpp的demo,使用的聊天服务器,在mac上使用。

    ejabberd windows installer

    ejabberd windows installer

    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:ejabberd-XMPP和Web聊天

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

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

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

    ejabberd-load-test

    ejabberd 负载测试

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

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

    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

    Ejabberd 服务器 asmck Android端使用的jar包 spack pc端客户端

    android+ejabberd

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

    ejabberd-14.07聊天服务器

    聊天服务器,特别适合做手机端(android、ios)的聊天服务器。

    ejabberd-debian:Debian 的 ejabberd 软件包

    ejabberd - 高性能企业即时消息服务器快速入门指南要求要编译 ejabberd,您需要: GNU 制造海湾合作委员会Libexpat 1.95 或更高版本利比亚ml 0.1.4 或更高Erlang/OTP R15B 或更高版本。 OpenSSL 0.9.8 或更高版本,...

    ejabberd安装配置[归纳].pdf

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

    ejabberd源码

    ejabberd是基于Jabber/XMPP协议的即时通讯服务器,由GPLv2授权(免费和开放源码),采用Erlang/OTP开发。它的特点是,跨平台,容错,集群和模块化。

Global site tag (gtag.js) - Google Analytics