金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
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() 发送原包。



posted on 2016-08-26 19:02 金庆 阅读(401) 评论(0)  编辑 收藏 引用 所属分类: 7. Erlang

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理