ejabberd mod_echo 解析
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() 发送原包。
ejabberd mod_echo 解析的更多相关文章
- Ejabberd源码解析前奏--配置
一.基本配置 配置文件将在你第一次启动ejabberd时加载,从该文件中获得的内容将被解析并存储到内部的ejabberd数据库中,以后的配置将从数据库加载,并且任何配置文件里的命令都会被添加到 ...
- Ejabberd源码解析前奏--管理
一.ejabberdctl 使用ejabberdctl命令行管理脚本,你可以执行ejabberdctl命令和一些普通的ejabberd命令(后面会详细解说).这意味着你可以在一个本地或远程ejabbe ...
- Ejabberd源码解析前奏--安全
一.防火墙设置 当你配置防火墙的时候,你需要注意以下 TCP 端口: 端口 描述 5222 用于 Jabber/XMPP 客户端连接的标准端口, 纯文本或 STARTTLS. 5223 Jabb ...
- Ejabberd源码解析前奏--概述
一.绪论 Ejabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台.分布式.容错且基于开放标准的实时通讯系统.Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模 ...
- Ejabberd源码解析前奏--调试
一.日志文件 一个ejabberd节点写两个日志文件: ejabberd.log ejabberd 服务日志, 由 ejabberd 节点汇报的消息erlang.log Erlang/OTP 系 ...
- Ejabberd源码解析前奏--集群
一.如何工作 一个XMPP域是由一个或多个ejabberd节点伺服的. 这些节点可能运行在通过网络连接的不同机器上. 它们都必须有能力连接到所有其它节点的4369端口, 并且必须有相同的 magic ...
- Erlang--etc结构解析
Erlang中可以用List表达集合数据,但是如果数据量特别大的话在List中访问元素就会变慢了;这种主要是由于List的绝大部分操作都是基于遍历完成的. Erlang的设计目标是软实时(参考:htt ...
- Ejabberd外部组件开发
Ejabberd的基本介绍就不多言了,使用erlang开发的高并发高稳定性XMPP服务器,在whatsapp中得到了应用,算是erlang领域一个杀手级应用.前面的文章中我已经总结了Ejabberd插 ...
- Ejabberd作为推送服务的优化手段
AVOS Cloud目前还在用Ejabberd做Android的消息推送服务.当时选择Ejabberd,是因为Ejabberd是一个发展很长时间的XMPP实现,并且基于Erlang,设想能在我们自主研 ...
随机推荐
- 百度API-------热力图
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- ●BZOJ 1444 [Jsoi2009]有趣的游戏
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1444题解.1: 概率dp,矩阵乘法,快速幂. 对所有串建立AC自动机, 那么如果在trie树 ...
- bzoj 2560: 串珠子
Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...
- ●UOJ 21 缩进优化
题链: http://uoj.ac/problem/21 题解: ...技巧题吧 先看看题目让求什么: 令$F(x)=\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor +a[ ...
- 毕业设计-JSP论文盲审系统
之前做的一款jsp的论文盲审系统,ssh框架的,学生提交论文,系统管理员将论文分配给教员,教员在不知学员是谁的情况之下,对论文进行打分,然后提交给系统,最后系统发布成绩,供学员查看. 整体做的还不错, ...
- 360面试-C++后端(实习)
在线远程视频面试 一面: 自我介绍. 知道哪几种排序算法,各算法的时间复杂度. 解决hash冲突的几种方式. 有哪些方法清除cache中旧的数据.不太清楚,我扯到了操作系统中缺页中断的页面置换原理上, ...
- Nginx+Tomca+Redis实现负载均衡、资源分离、session共享
目标实现:Nginx作为负载均衡后端多Tomcat实例,通过Redis实现Session共享. 操作系统环境:CentOS 6.8 SSH:SecureCRT 其中 Nginx服务:80端口 Tomc ...
- 在Spring Boot中使用Spring Security实现权限控制
丢代码地址 https://gitee.com/a247292980/spring-security 再丢pom.xml <properties> <project.build.so ...
- hibernate实体对象的三种状态:自由状态,持久状态,游离状态.
自由态与游离态的区别: 当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它 对应的记录,只是现在这个游离对 ...
- 55. Jump Game(中等)
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...