1

我正在 tigase 中实现 QOS 以确保消息的传递。下面列出了我的 QOS 步骤

  • 以时间戳的排序顺序缓存每个消息包(除了编写、键入、停止等)
  • 在收到数据包的传递通知时,我将其从缓存中删除
  • 在定期间隔后,启动一个线程以检查仍然存在于缓存中的数据包,并带有时间窗口
  • 如果线程在该时间窗口内发现任何数据包(这意味着消息未传递),则线程需要再次发送它

我的问题是如何在该线程内再次发送数据包。

  • 我可以从线程中尝试addOutPacket 吗(它现在不工作
  • 我应该在组件中实现我的 QOS 以便它可以轻松地执行addOutPacket
  • 或者有没有更好的方法来实现这一点

非常感谢您的建议

编辑:

一些澄清:

  • 我们不会无限期地将消息保存在缓存中
  • 我们将重试每条消息最多 3 次,之后我们会将未确认的数据包保存在离线存储中
  • 如果我认为默认情况下在 Tigase 中启用了 XEP-0198,当服务器和客户端之间的连接丢失(不可恢复的故障)时,我们仍然会遇到消息丢失。如果网络层需要时间来检测不可恢复的故障,则发送到该连接的消息将永久丢失。在 EDGE 或不稳定的互联网连接的情况下,我们将一直面临严重损害用户体验的问题。
4

1 回答 1

1

Tigase 已经支持 XEP-0198 - 包括数据包传递确认的流管理扩展。因此,我不确定您是否真的需要为 Tigase 实施 QoS 系统。请解释为什么 XEP-0198 不够好以及您要实现什么。QoS 系统的真正含义是什么?其他一些问题 - 当消息无法传递时会发生什么,比如说 100 次?你要无限期地重试吗?另一个问题。您可以在缓存中保留多少条消息?如果您的缓存已满并且您无法将新消息放入缓存中怎么办?您的 QoS 系统是否旨在为 1000 万连接用户处理每秒 100k 条消息的负载?

于 2013-11-19T21:05:30.887 回答