小编Joh*_*ter的帖子

当用户失去连接时,ejabberd在线状态

我有ejabberd设置为移动应用程序之间的xmpp服务器,即.自定义iPhone和Android应用.

但我似乎陷入了对ejabberd处理在线状态的限制.

场景:

  • 用户A通过他们的手机向用户B发送消息.
  • 用户B失去所有连接,因此客户端无法与服务器断开连接.
  • ejabberd仍然将用户B列为在线.
  • 由于ejabberd假定用户B仍在线,因此来自用户A的任何消息都会传递给死连接.
  • 因此,用户B将不会收到消息,也不会将其保存为脱机消息,因为ejabberd假定用户在线.
  • 消息丢失了.
  • 在ejabberd意识到连接过时之前,它会将其视为在线用户.

并投入数据连接变化(wifi到3G到4G ......)你会发现这种情况发生了很多.

mod_ping:

我尝试以10秒的间隔实现mod_ping.
https://www.process-one.net/docs/ejabberd/guide_en.html#modping
但是正如文档所述,在断开用户连接之前,ping将等待32秒以进行响应.
这意味着将有一个42秒的窗口,用户可能会丢失其消息.

理想方案:

即使ping等待时间可以减少,它仍然不是一个完美的解决方案.
有没有一种方法可以让ejabberd在丢弃消息之前等待来自客户端的200响应?如果没有响应,则将其保存为脱机.
是否可以编写一个钩子来解决这个问题?
或者是否有一个我错过的简单设置?

仅供参考:我没有使用BOSH.

erlang xmpp ejabberd

23
推荐指数
2
解决办法
7964
查看次数

标签 统计

ejabberd ×1

erlang ×1

xmpp ×1