ejabberd,Rosters和mySQL

时间:2011-03-08 07:53:27

标签: xmpp ejabberd

快速背景。

我们正在运行一个ejabberd服务器,其中有一个相当大的用户群连接到它(700k +用户)。我们有一个问题,名单大小对于mnesia来说太大了,所以我们决定拥有网络界面,为用户登录/注销时添加和删除名单条目。这种方法的问题在于它延迟了他们的登录,这是我们无法做到的。我们的工作就是让名单请求进入一个延迟的任务表,这个表将由一个cron获取并添加条目。然后我们遇到的问题是数据库中堆积条目的速度超出了处理它所花费的时间。测试显示它不是脚本,而是来自ejabberd服务器的实际响应时间。

在此之后,我们决定将名单从内部menesia DB移动到mysql。通过这样做,我们可以直接从DB插入/删除名单条目,这对ejabberd服务器没有影响。

我已成功为用户添加和删除了名单条目,并且它们已成功显示在网络界面中。

现在出现问题:在我添加了互惠名单条目后,我需要告诉用户此人在线,以便他们在网络界面中在线显示。目前,在我添加了名单条目后,用户只显示为离线。

根据我的理解,这应该是一个相当简单的在线请求,但是我无法让它工作。是否有模块或简单的方式发送在线状态请求,因此在您的名单中有您的人知道您在线并且也可以快速查询您自己的名单。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

您还需要发送相关的< presence /> stanzas用于将名册更新传播给客户。

您应该阅读RFC的相关部分,方便地链接到这里:

http://xmpp.org/rfcs/rfc3921.html#int