IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    ejabberd mod_echo 解析

    金庆发表于 2016-08-26 11:02:00
    love 0
    ejabberd mod_echo 解析

    (金庆的专栏 2016.8)

    按开发入门的说明,mod_echo是最简单的模块之一。
    https://docs.ejabberd.im/developer/
    当然 mod_hello_world 只有开始和结束日志,没有实际功能,比 mod_echo 更简单。

    配置说明一定要看,因为其中有模块功能的简介:
    https://docs.ejabberd.im/admin/guide/configuration/#modecho

    没看功能简介,直接看代码,结果被 do_client_version/3 给引入了歧途。

    echo模块实现了echo功能,向特定域名的用户发送聊天消息,会原样返回。

    测试图:


    echo域名是可配置的:

    modules:
      mod_echo:
        host: "echo_x.mydomain"


    缺省为 "echo.@HOST@", 其中@HOST@会被替换成服务器域名。

    代码中的 do_client_version/3 演示了 route + receive 发送并收取应答,
    但是与echo功能无关,可以忽略该函数。

    echo功能是 register_route/2 完成的,
      ejabberd_route:register_route(MyHost, Host)
    表示从Host到MyHost的消息需要本模块来路由。
    Host是服务器名,MyHost是配置的mod_echo.host.

    可以查看route表:
    (ejabberd@localhost)1> ets:tab2list(route).
    [{route,<<"pubsub.zt-2203857">>,<<"zt-2203857">>,<0.5500.0>,
            undefined},
     {route,<<"echox.zt-2203857">>,<<"zt-2203857">>,<0.5492.0>,
            undefined},
     {route,<<"conference.zt-2203857">>,<<"zt-2203857">>,
            <0.5445.0>,undefined},
     {route,<<"zt-2203857">>,<<"zt-2203857">>,<0.5406.0>,
            {apply,ejabberd_local,route}}]
    (ejabberd@localhost)2>

    路由消息在 handle_info 中处理,它将来源和目的调换一下,然后调用 route() 发送原包。





    金庆 2016-08-26 19:02 发表评论


沪ICP备19023445号-2号
友情链接