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



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

  1. 是在服务器端还是客户端完成的?如果它在任何一端,是否在超时的情况下等待较新的消息?
  2. 它是否使用增量序列号来订购保证?
  3. 在客户端重新连接时,客户端如何知道要从服务器中提取什么?客户端是否发送名单中所有项的最后一个消息 ID?还是服务器保留每个设备的QOS数据和客户端状态?

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

根据 TCP 文档:

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

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

在 XMPP 协议中,客户端可以在完成会话启动、资源绑定和身份验证等操作后发送消息。

这些消息按照客户端发送并路由到其收件人的顺序进行处理。如果收件人处于脱机状态,它会推送并弹出相同的订单数据库以供以后传递。

这里的排序保证主要由TCP网络栈来保证。

最新更新