文档章节

基于ejabberd简单实现xmpp群聊离线消息

nidongwo-
 nidongwo-
发布于 2014/11/08 12:00
字数 346
阅读 595
收藏 1
点赞 1
评论 0

首先,xmpp服务器是基于ejabberd。离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact; 修改后实现群聊离线消息:https://github.com/Joywok/mod_interact

不仅仅要修改这一个文件,还涉及到ehabberd_sm、mod_muc_room、mod_offline三个模块的修改。

以上三个文件仅仅只需要屏蔽或者修改几行代码就能实现了,很简单的。

ehabberd_sm屏蔽以下两行代码:

<<"groupchat">> ->
bounce_offline_message(From, To, Packet);

mod_offline: 将下面一行代码修改

if (Type /= <<"error">>) and (Type /= <<"groupchat">>)

修改后的:

if (Type /= <<"error">>)

mod_muc_room这个模块多要修改几行,muc只是给在线的用户发送消息,那么不在线的用户就收不到了,所以在发送消息那块把发送在线的用户修改为muc的成员就ok了。

把以下一个遍历代码修改:

lists:foreach(
 fun({_LJID, Info}) ->
 ejabberd_router:route(
 jlib:jid_replace_resource(
StateData#state.jid,
FromNick),
Info#user.jid,
 Packet)
 end,?DICT:to_list(StateData#state.users)),

修改后的代码:

lists:foreach(
 fun(Info) ->
 {Jid,_} = Info,
{Email,Server,Source}=Jid,
To={'jid',Email,Server,Source,Email,Server,Source},
ejabberd_router:route(
jlib:jid_replace_resource(
 StateData#state.jid,
FromNick),
To,
Packet)
end,?DICT:to_list(StateData#state.affiliations)),

重新编译模块,替换原来的模块,重启ejabberd服务器就ok了。

按照这个就能简单的实现群聊离线消息了。

贴上github实现地址:https://github.com/cisiqo/ejabberd-module-dev

© 著作权归作者所有

共有 人打赏支持
nidongwo-
粉丝 35
博文 26
码字总数 4927
作品 0
武汉
程序员
说说ejabberd离线消息踩过的坑

使用过ejabberd的或许知道,也许踩过这个坑。那么就说说我们踩过的ejabberd的离线消息的坑吧。 ejabberd原生的离线消息的机制是,一般用户保存100条离线消息,管理员保存5000条离线消息。超过...

nidongwo-
2016/08/29
44
0
共享和出售即时通讯源代码,类似微信陌陌,全新定义基于Tiagse的社交聊天系统

这套IM系统是我个人自主开发 完全基于Tiagse ,主要功能为:Android、iOS和服务端,可以支持包括文字 图片,语音等任何消息形式,系统采用的成熟的XMPP协议+CentOS 6.5+Jdk1.8+mysql5.6+mon...

iholdcode
2015/08/13
1K
4
企业级 XMPP 通信工具--ttalk.im

说到 IM 通信,一般首选都是 XMPP,并且首推 Ejabberd。国内使用 Ejabberd 厂家很多,对企业级的 IM 有需求的厂家很多,同时希望能快速集成一个 IM 的厂家就更多了。但是在这些厂家中很多都抱...

匿名
2016/01/14
2.4K
0
基于ejabberd实现各个客户端消息同步

先上图再说(左侧是web端,右侧是ios端) ![在此输入图片描述][1] ![在此输入图片描述][2] 要实现上面的功能,如果所有设备都在线的话,那么carboncopy(xmpp xep-0280协议)这个模块是可以实...

nidongwo-
2015/03/28
0
0
Android即时通讯--YiIM

基于Xmpp的Android即时通讯手机应用软件YiIM第二版 功能日志: 登录 好友获取 文本消息发送与接收,离线消息接收 消息记录,会话记录 添加好友 发送语音短消息 发送大表情 发送文字表情混合消...

bjhongping
2014/09/16
7.9K
0
为什么XMPP?

为什么XMPP? 在研究XMPP与红隼利用激励因素是被终止虚拟机的问题不作任何清除或信号,机器将离开泳池。XMPP提供用于确定是否一个机器被连接到池的基础设施。它也提供了用于共享连接的机器(...

今幕明
2016/08/26
13
0
AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现

AeroFS 团队今天开源了 SSMP 协议,SSMP 也就是 Stupid-Simple Messaging Protocol,里面包含协议规范,Go 实现,Java 实现和服务器加载测试工具。 XMPP 历史 XMPP 在 AeroFS 有一段很长的历...

oschina
2015/09/11
2.8K
6
androidpn 作为Android推送方案存在的问题

如果百度或者Google搜索 “android 推送” 关键字,相当一部分文章都在说到 androidpn。也可以看到有人说用起来了,有人在吐槽说不稳定、功能缺失,维护工作量大。本文尝试对 androidpn 的前...

极光推送
2012/11/19
11.6K
94
移动端IM中大规模群消息的推送如何保证效率、实时性?

本文原题为“大规模群消息推送如何保证实时性?”,来自瓜子二手车IM负责人:封宇,本次内容有修订,感谢原作者(原文链接在文末)。 1、编者注 众所周之,群聊是移动端IM的服务端技术难点所...

JackJiang2011
2017/11/20
0
0
移动端IM中大规模群消息的推送如何保证效率、实时性?

本文原题为“大规模群消息推送如何保证实时性?”,来自瓜子二手车IM负责人:封宇,本次内容有修订,感谢原作者(原文链接在文末)。 1、编者注 众所周之,群聊是移动端IM的服务端技术难点所...

JackJiang-
2017/11/20
158
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
4分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
4分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
5分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
10分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
10分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
26分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
34分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
55分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
137
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部