繁体   English   中英

ejabberd 如何处理消息排序和传递?

[英]How does ejabberd handle message ordering and delivery?

根据https://datatracker.ietf.org/doc/rfc6120/?include_text=110.1。 有序处理如何确保名册中所有项目的有序消息传递?

  1. 它是在服务器端还是客户端完成的? 如果它在任何一侧,是否在超时的旧消息上等待新消息?
  2. 它是否使用增量序列号来保证订购?
  3. 在客户端重新连接时,客户端如何知道从服务器中提取什么? 客户端是否发送名册中所有项目的最后一个 msgId? 或者服务器是否为每个设备保留 QOS 数据和客户端 state?

首先,由于 XMPP 使用 TCP 传输协议,它确保服务器以与客户端发送数据相同的顺序接收数据。

根据 TCP 文档:

TCP 保证数据的传递,也保证数据包将按照发送时的相同顺序传递

ejabbred 是一个 XMPP 服务器,通过 TCP 接收到的原始数据必须符合 XMPP 协议,并且与经过验证的 XMPP 服务器相同。

在XMPP协议客户端完成session发起、资源绑定、认证等操作后,就可以发送消息了。

这些消息按照客户端发送消息和路由到其接收者的顺序进行处理。 如果收件人离线,它会将相同的订单推送并弹出到数据库以供以后交付。

这里的订购保证主要由 TCP 网络堆栈来保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM